Skip to content

Commit c41bf91

Browse files
authored
Merge pull request #5156 from charlown/master
[bsp/wch/arm/ch32f103c8-core/board/board.h]: 加入宏开关;添加移植文档
2 parents 06fdc10 + 0ea1fac commit c41bf91

File tree

2 files changed

+218
-0
lines changed

2 files changed

+218
-0
lines changed

bsp/wch/arm/ch32f103c8-core/board/board.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,33 @@ extern int __bss_end;
4545

4646

4747
rt_uint32_t ch32_get_sysclock_frequency(void);
48+
49+
#ifdef BSP_USING_UART
4850
void ch32f1_usart_clock_and_io_init(USART_TypeDef* usartx);
51+
#endif
52+
53+
#ifdef BSP_USING_SPI
4954
void ch32f1_spi_clock_and_io_init(SPI_TypeDef* spix);
5055
rt_uint32_t ch32f1_spi_clock_get(SPI_TypeDef* spix);
56+
#endif
57+
58+
#ifdef BSP_USING_HWI2C
5159
void ch32f1_i2c_clock_and_io_init(I2C_TypeDef* i2cx);
5260
void ch32f1_i2c_config(I2C_TypeDef* i2cx);
61+
#endif
62+
63+
#ifdef BSP_USING_TIM
5364
void ch32f1_tim_clock_init(TIM_TypeDef *timx);
5465
rt_uint32_t ch32f1_tim_clock_get(TIM_TypeDef *timx);
66+
67+
#ifdef BSP_USING_HWTIMER
5568
struct rt_hwtimer_info* ch32f1_hwtimer_info_config_get(TIM_TypeDef *timx);
69+
#endif
70+
71+
#ifdef BSP_USING_PWM
5672
void ch32f1_pwm_io_init(TIM_TypeDef *timx, rt_uint8_t channel);
73+
#endif
74+
#endif
5775

5876

5977

bsp/wch/arm/ch32f10x_port_cn.md

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
# CH32F10X系列BSP移植
2+
## 1 工程结构
3+
+ wch\arm\ch32f103c8-core
4+
+ wch\arm\Libraries
5+
+ wch\arm\Libraries\ch32_drivers
6+
+ wch\arm\Libraries\CH32F10x_StdPeriph_Driver
7+
+ wch\arm\tools
8+
9+
ch32f103c8-core为移植到具体芯片的BSP, Libraries存放的是厂商的驱动库(CH32F10x_StdPeriph_Driver等)和适配rt-thread的驱动(ch32_drivers),
10+
tools是在env环境下使用scons --dist所需要的依赖工具
11+
12+
### 1.1 已适配rt-thread的驱动(ch32_drivers):
13+
现已支持以下驱动(支持的驱动,使用到的宏开关,需要实现的接口):
14+
+ GPIO
15+
+ RT_USING_PIN
16+
+ UART 1/2/3
17+
+ RT_USING_SERIAL
18+
+ BSP_USING_UART
19+
+ BSP_USING_UART1
20+
+ BSP_USING_UART2
21+
+ BSP_USING_UART3
22+
~~~c
23+
void ch32f1_usart_clock_and_io_init(USART_TypeDef* usartx);
24+
~~~
25+
+ SPI 1/2
26+
+ RT_USING_SPI
27+
+ BSP_USING_SPI
28+
+ BSP_USING_SPI1
29+
+ BSP_USING_SPI2
30+
~~~c
31+
void ch32f1_spi_clock_and_io_init(SPI_TypeDef* spix);
32+
rt_uint32_t ch32f1_spi_clock_get(SPI_TypeDef* spix);
33+
~~~
34+
+ I2C(hardware) 1/2
35+
+ RT_USING_I2C
36+
+ BSP_USING_HWI2C
37+
+ BSP_USING_HWI2C1
38+
+ BSP_USING_HWI2C2
39+
~~~c
40+
void ch32f1_i2c_clock_and_io_init(I2C_TypeDef* i2cx);
41+
void ch32f1_i2c_config(I2C_TypeDef* i2cx);
42+
~~~
43+
+ WDT
44+
+ RT_USING_WDT
45+
+ BSP_USING_IWDT
46+
+ LSI_VALUE
47+
+ RTC
48+
+ RT_USING_RTC
49+
+ BSP_USING_RTC
50+
+ BSP_USING_RTC_LSI
51+
+ LSI_VALUE
52+
+ HWTIMER 1/2/3/4
53+
+ RT_USING_HWTIMER
54+
+ BSP_USING_HWTIMER
55+
+ BSP_USING_TIM1_HWTIMER
56+
+ BSP_USING_TIM2_HWTIMER
57+
+ BSP_USING_TIM3_HWTIMER
58+
+ BSP_USING_TIM4_HWTIMER
59+
~~~c
60+
void ch32f1_tim_clock_init(TIM_TypeDef *timx);
61+
rt_uint32_t ch32f1_tim_clock_get(TIM_TypeDef *timx);
62+
~~~
63+
~~~c
64+
struct rt_hwtimer_info* ch32f1_hwtimer_info_config_get(TIM_TypeDef *timx);
65+
~~~
66+
+ PWM 4(timer) x 4 (channel)
67+
+ RT_USING_PWM
68+
+ BSP_USING_TIM1_PWM
69+
+ BSP_USING_TIM1_PWM_CH1
70+
+ BSP_USING_TIM1_PWM_CH2
71+
+ BSP_USING_TIM1_PWM_CH3
72+
+ BSP_USING_TIM1_PWM_CH4
73+
+ BSP_USING_TIM2_PWM
74+
+ BSP_USING_TIM2_PWM_CH1
75+
+ BSP_USING_TIM2_PWM_CH2
76+
+ BSP_USING_TIM2_PWM_CH3
77+
+ BSP_USING_TIM2_PWM_CH4
78+
+ BSP_USING_TIM3_PWM
79+
+ BSP_USING_TIM3_PWM_CH1
80+
+ BSP_USING_TIM3_PWM_CH2
81+
+ BSP_USING_TIM3_PWM_CH3
82+
+ BSP_USING_TIM3_PWM_CH4
83+
+ BSP_USING_TIM4_PWM
84+
+ BSP_USING_TIM4_PWM_CH1
85+
+ BSP_USING_TIM4_PWM_CH2
86+
+ BSP_USING_TIM4_PWM_CH3
87+
+ BSP_USING_TIM4_PWM_CH4
88+
~~~c
89+
void ch32f1_pwm_io_init(TIM_TypeDef *timx, rt_uint8_t channel);
90+
~~~
91+
其中需要依赖定时器的接口:
92+
~~~c
93+
void ch32f1_tim_clock_init(TIM_TypeDef *timx);
94+
rt_uint32_t ch32f1_tim_clock_get(TIM_TypeDef *timx);
95+
~~~
96+
97+
98+
### 1.2 需要实现的接口:
99+
除了使用上面驱动提及的接口外,以下的接口必须实现:
100+
~~~c
101+
rt_uint32_t ch32_get_sysclock_frequency(void);
102+
~~~
103+
## 2 构建具体芯片BSP
104+
以ch32f103c8-core为例,在ENV环境下,使用MDK,至少需要准备
105+
+ ch32f103c8-core (具体的BSP名)
106+
+ ch32f103c8-core\applications
107+
+ ch32f103c8-core\applications\SConscript
108+
+ ch32f103c8-core\applications\main.c
109+
+ ch32f103c8-core\board
110+
+ ch32f103c8-core\board\linker_scripts
111+
+ ch32f103c8-core\board\linker_scripts\link.sct
112+
+ ch32f103c8-core\board\board.c
113+
+ ch32f103c8-core\board\board.h
114+
+ ch32f103c8-core\board\ch32f10x_conf.h
115+
+ ch32f103c8-core\board\system_ch32f10x.c
116+
+ ch32f103c8-core\board\Kconfig
117+
+ ch32f103c8-core\board\SConscript
118+
+ ch32f103c8-core\Kconfig
119+
+ ch32f103c8-core\rtconfig.py
120+
+ ch32f103c8-core\SConscript
121+
+ ch32f103c8-core\SConstruct
122+
+ ch32f103c8-core\template.uvprojx
123+
124+
### 2.1 创建template.uvprojx
125+
新建名为template的MDK工程,删除多余的子目录target1,将目录改名为rtthread-ch32f103x,options选项栏device设置具体芯片,user编译后的动作, 如"fromelf --bin !L --output rtthread.bin"
126+
127+
### 2.2 编写board/Kconfig
128+
129+
~~~
130+
menu "Hardware Drivers Config"
131+
132+
config SOC_CH32F103C8
133+
bool
134+
select SOC_ARM_SERIES_CH32F103
135+
select RT_USING_COMPONENTS_INIT
136+
select RT_USING_USER_MAIN
137+
default y
138+
~~~
139+
SOC_CH32F103C8为具体的芯片,SOC_ARM_SERIES_CH32F103在Libraries\Kconfig下已定义。
140+
RT_USING_COMPONENTS_INIT,RT_USING_USER_MAIN为rt-thread设备框架默认选项。
141+
142+
143+
使用适配的驱动根据宏开关编写即可,以串口驱动为例:
144+
+ BSP_USING_XXX
145+
+ select RT_USING_XXX
146+
+ BSP_USING_XXX1
147+
+ BSP_USING_XXX2
148+
149+
~~~
150+
menu "On-chip Peripheral Drivers"
151+
152+
config BSP_USING_UART
153+
bool "using onchip usart"
154+
select RT_USING_SERIAL
155+
default n
156+
157+
if BSP_USING_UART
158+
config BSP_USING_UART1
159+
bool "using uart1"
160+
default n
161+
162+
config BSP_USING_UART2
163+
bool "using uart2"
164+
default n
165+
166+
config BSP_USING_UART3
167+
bool "using uart3"
168+
default n
169+
endif
170+
~~~
171+
172+
比较特殊的定时器和PWM驱动额外定义了以下宏开关,详见ch32f103c8-core。
173+
+ BSP_USING_TIM
174+
+ BSP_USING_TIM1
175+
+ BSP_USING_TIM2
176+
+ BSP_USING_TIM3
177+
+ BSP_USING_TIM4
178+
### 2.3 在board/board.h加入接口,并在board/board.c实现
179+
使用适配的驱动根据宏开关编写即可,如串口驱动:
180+
+ BSP_USING_XXX
181+
~~~
182+
#ifdef BSP_USING_UART
183+
void ch32f1_usart_clock_and_io_init(USART_TypeDef* usartx);
184+
#endif
185+
~~~
186+
比较特殊的定时器和PWM驱动使用额外定义了的宏开关
187+
~~~c
188+
#ifdef BSP_USING_TIM
189+
void ch32f1_tim_clock_init(TIM_TypeDef *timx);
190+
rt_uint32_t ch32f1_tim_clock_get(TIM_TypeDef *timx);
191+
192+
#ifdef BSP_USING_HWTIMER
193+
struct rt_hwtimer_info* ch32f1_hwtimer_info_config_get(TIM_TypeDef *timx);
194+
#endif
195+
196+
#ifdef BSP_USING_PWM
197+
void ch32f1_pwm_io_init(TIM_TypeDef *timx, rt_uint8_t channel);
198+
#endif
199+
#endif
200+
~~~

0 commit comments

Comments
 (0)