Skip to content

Commit c16f88a

Browse files
committed
[bsp] add n32 pwm driver
1 parent 9a6d515 commit c16f88a

38 files changed

Lines changed: 3857 additions & 994 deletions

File tree

bsp/n32/libraries/n32_drivers/SConscript

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ if GetDepend(['RT_USING_RTC']):
4545
if GetDepend(['RT_USING_WDT']):
4646
src += ['drv_wdt.c']
4747

48+
if GetDepend('BSP_USING_PWM'):
49+
src += ['drv_base.c']
50+
51+
if GetDepend(['BSP_USING_PWM']):
52+
src += ['drv_pwm.c']
53+
4854
path = [cwd]
4955
path += [cwd + '/config']
5056

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/**
2+
* @file drv_base.c
3+
* @brief
4+
* @author car (1085582540@qq.com)
5+
* @version 1.0
6+
* @date 2026-01-07
7+
*
8+
* @copyright Copyright (c) 2026 58
9+
*
10+
*/
11+
#include <rtthread.h>
12+
13+
14+
#define DBG_TAG "PWM"
15+
#define DBG_LEVEL DBG_LOG
16+
#include <rtdbg.h>
17+
#include "board.h"
18+
/**
19+
* @brief 使能对应GPIO的时钟
20+
*/
21+
void n32_gpio_rcc_enable(GPIO_Module *gpio_grp)
22+
{
23+
assert_param(IS_GPIO_ALL_PERIPH(gpio_grp));
24+
if (GPIOA == gpio_grp)
25+
{
26+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
27+
LOG_D("enable gpio rcc GPIOA");
28+
}
29+
else if (GPIOB == gpio_grp)
30+
{
31+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
32+
LOG_D("enable gpio rcc GPIOB");
33+
}
34+
else if (GPIOC == gpio_grp)
35+
{
36+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
37+
LOG_D("enable gpio rcc GPIOC");
38+
}
39+
else if (GPIOD == gpio_grp)
40+
{
41+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOD, ENABLE);
42+
LOG_D("enable gpio rcc GPIOD");
43+
}
44+
#if defined(SOC_N32G45X) || defined(SOC_N32WB452) || defined(SOC_N32G4FR)
45+
else if (GPIOE == gpio_grp)
46+
{
47+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
48+
}
49+
#if defined(SOC_N32G45X)
50+
else if (GPIOF == gpio_grp)
51+
{
52+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOF, ENABLE);
53+
}
54+
else if (GPIOG == gpio_grp)
55+
{
56+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOG, ENABLE);
57+
}
58+
#endif
59+
#endif
60+
}
61+
/**定时器2的引脚涉及了SWD-JTAG的调试引脚,在复用时需要先设置jSWD-JTAG的复用
62+
* 复用功能 GPIO端口
63+
JTMS/SWDIO PA13-----------swd
64+
JTCK/SWCLK A14------------swd
65+
JTDI PA15
66+
JTDO PB3
67+
NJTRST PB4
68+
69+
* GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_SW_ENABLE,ENABLE);
70+
*/
71+
void gpio_remap_JTAGOFF_SWDON(GPIO_Module *gpio_grp, uint16_t pin)
72+
{
73+
#if defined(SOC_N32G45X) || defined(SOC_N32WB452) || defined(SOC_N32G4FR)
74+
75+
if ((GPIOA == gpio_grp && GPIO_PIN_15) ||
76+
(GPIOB == gpio_grp && GPIO_PIN_3) ||
77+
(GPIOB == gpio_grp && GPIO_PIN_4))
78+
{
79+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO, ENABLE);
80+
GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_SW_ENABLE, ENABLE);
81+
}
82+
#endif
83+
}
84+
85+
/**
86+
* @brief 定时器的时钟使能配置
87+
*/
88+
void n32_time_rcc_config(TIM_Module *htim)
89+
{
90+
RT_ASSERT(TIM1 == htim || TIM2 == htim || TIM3 == htim || TIM4 == htim || TIM5 == htim || TIM8 == htim
91+
#if defined(SOC_N32G45X) || defined(SOC_N32WB452) || defined(SOC_N32G4FR)
92+
);
93+
#else
94+
|| TIM9 == htim);
95+
#endif
96+
97+
if (TIM1 == htim)
98+
{
99+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_TIM1, ENABLE);
100+
}
101+
else if (TIM2 == htim)
102+
{
103+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM2, ENABLE);
104+
}
105+
else if (TIM3 == htim)
106+
{
107+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM3, ENABLE);
108+
}
109+
else if (TIM4 == htim)
110+
{
111+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM4, ENABLE);
112+
}
113+
else if (TIM5 == htim)
114+
{
115+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM5, ENABLE);
116+
}
117+
else if (TIM8 == htim)
118+
{
119+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_TIM8, ENABLE);
120+
}
121+
#if defined(SOC_N32L43X) || defined(SOC_N32L40X) || defined(SOC_N32G43X)
122+
else if (TIM9 == htim)
123+
{
124+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM9, ENABLE);
125+
}
126+
#endif
127+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#ifndef __DRV_BASE__
2+
#define __DRV_BASE__
3+
#include "board.h"
4+
/**
5+
* @brief 使能对应GPIO的时钟
6+
*/
7+
void n32_gpio_rcc_enable(GPIO_Module *gpio_grp);
8+
9+
/**
10+
* @brief 定时器的时钟使能配置
11+
*/
12+
void n32_time_rcc_config(TIM_Module *htim);
13+
14+
/**定时器2的引脚涉及了SWD-JTAG的调试引脚,在复用时需要先设置jSWD-JTAG的复用
15+
* 复用功能 GPIO端口
16+
JTMS/SWDIO PA13-----------swd
17+
JTCK/SWCLK A14------------swd
18+
JTDI PA15
19+
JTDO PB3
20+
NJTRST PB4
21+
22+
* GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_SW_ENABLE,ENABLE);
23+
*/
24+
void gpio_remap_JTAGOFF_SWDON(GPIO_Module *gpio_grp, uint16_t pin);
25+
#endif

0 commit comments

Comments
 (0)