Skip to content

Commit 0a03782

Browse files
committed
[bsp]stm32f103-keysking pwm驱动
1 parent 3b23b29 commit 0a03782

File tree

7 files changed

+175
-27
lines changed

7 files changed

+175
-27
lines changed

bsp/stm32/stm32f103-keysking-learning/.ci/attachconfig/ci.attachconfig.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ system.use_nano:
55
<<: *scons
66
kconfig:
77
CONFIG_RT_USING_NANO=y
8-
devices.gpio:
8+
devices.uart:
99
<<: *scons
1010
kconfig:
1111
- CONFIG_BSP_USING_GPIO=y
12-
devices.uart:
12+
- CONFIG_BSP_USING_UART=y
13+
- CONFIG_USING_SERIAL=y
14+
devices.servo:
1315
<<: *scons
1416
kconfig:
15-
- CONFIG_BSP_USING_UART=y
16-
- CONFIG_USING_SERIAL=y
17+
- CONFIG_BSP_USING_SERVO=y

bsp/stm32/stm32f103-keysking-learning/.config

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
252252
# CONFIG_RT_USING_NULL is not set
253253
# CONFIG_RT_USING_ZERO is not set
254254
# CONFIG_RT_USING_RANDOM is not set
255-
# CONFIG_RT_USING_PWM is not set
255+
CONFIG_RT_USING_PWM=y
256256
# CONFIG_RT_USING_PULSE_ENCODER is not set
257257
# CONFIG_RT_USING_INPUT_CAPTURE is not set
258258
# CONFIG_RT_USING_MTD_NOR is not set
@@ -1380,6 +1380,7 @@ CONFIG_SOC_SERIES_STM32F1=y
13801380
# Onboard Peripheral Drivers
13811381
#
13821382
CONFIG_BSP_USING_USB_TO_USART=y
1383+
# CONFIG_BSP_USING_SERVO is not set
13831384
# end of Onboard Peripheral Drivers
13841385

13851386
#
@@ -1390,6 +1391,9 @@ CONFIG_BSP_USING_UART=y
13901391
CONFIG_BSP_STM32_UART_V1_TX_TIMEOUT=2000
13911392
CONFIG_BSP_USING_UART2=y
13921393
CONFIG_BSP_USING_UART3=y
1394+
CONFIG_BSP_USING_PWM=y
1395+
CONFIG_BSP_USING_PWM3=y
1396+
# CONFIG_BSP_USING_PWM4 is not set
13931397
# CONFIG_BSP_USING_UDID is not set
13941398
# end of On-chip Peripheral Drivers
13951399

bsp/stm32/stm32f103-keysking-learning/README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,14 @@ Keysking学习板是B站UP主Keysking推出的一块基于ARM Cortex-M3内核的
4141

4242
本BSP目前对外设的支持情况如下:
4343

44-
| 板载外设 | 支持情况 | 备注 |
45-
| -------- |:--------:| ----------- |
46-
| USB转串口 | 支持 | UART2 |
47-
| **片上外设** | **支持情况** | **备注** |
48-
| GPIO | 支持 | |
49-
| UART | 支持 | UART2,3 |
44+
| 板载外设 | 支持情况 | 备注 |
45+
| -------- |:--------:| -------------- |
46+
| USB转串口 | 支持 | UART2(用作finsh) |
47+
| 舵机 | 支持 | PWM4CH3 |
48+
| **片上外设** | **支持情况** | **备注** |
49+
| GPIO | 支持 | |
50+
| UART | 支持 | UART2,3 |
51+
| PWM | 支持 | PWM3,PWM4 |
5052

5153
## 使用说明
5254

@@ -121,5 +123,3 @@ STM32F103C8T6的Flash在官方文档中的大小是64KB,但是其实该芯片
121123
维护人:
122124

123125
* qianjiuyuan, 邮箱:<[email protected]>
124-
125-

bsp/stm32/stm32f103-keysking-learning/board/CubeMX_Config/CubeMX_Config.ioc

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,30 @@ Mcu.Family=STM32F1
1010
Mcu.IP0=NVIC
1111
Mcu.IP1=RCC
1212
Mcu.IP2=SYS
13-
Mcu.IP3=USART2
14-
Mcu.IP4=USART3
15-
Mcu.IPNb=5
13+
Mcu.IP3=TIM3
14+
Mcu.IP4=TIM4
15+
Mcu.IP5=USART2
16+
Mcu.IP6=USART3
17+
Mcu.IPNb=7
1618
Mcu.Name=STM32F103C(8-B)Tx
1719
Mcu.Package=LQFP48
1820
Mcu.Pin0=PC14-OSC32_IN
1921
Mcu.Pin1=PC15-OSC32_OUT
20-
Mcu.Pin10=VP_SYS_VS_Systick
22+
Mcu.Pin10=PA13
23+
Mcu.Pin11=PA14
24+
Mcu.Pin12=PB8
25+
Mcu.Pin13=VP_SYS_VS_Systick
26+
Mcu.Pin14=VP_TIM3_VS_ClockSourceINT
27+
Mcu.Pin15=VP_TIM4_VS_ClockSourceINT
2128
Mcu.Pin2=PD0-OSC_IN
2229
Mcu.Pin3=PD1-OSC_OUT
2330
Mcu.Pin4=PA2
2431
Mcu.Pin5=PA3
25-
Mcu.Pin6=PB10
26-
Mcu.Pin7=PB11
27-
Mcu.Pin8=PA13
28-
Mcu.Pin9=PA14
29-
Mcu.PinsNb=11
32+
Mcu.Pin6=PA6
33+
Mcu.Pin7=PB10
34+
Mcu.Pin8=PB11
35+
Mcu.Pin9=PA8
36+
Mcu.PinsNb=16
3037
Mcu.ThirdPartyNb=0
3138
Mcu.UserConstants=
3239
Mcu.UserName=STM32F103C8Tx
@@ -55,10 +62,16 @@ PA3.GPIOParameters=GPIO_PuPd
5562
PA3.GPIO_PuPd=GPIO_PULLUP
5663
PA3.Mode=Asynchronous
5764
PA3.Signal=USART2_RX
65+
PA6.Locked=true
66+
PA6.Signal=S_TIM3_CH1
67+
PA8.Mode=Clock-out
68+
PA8.Signal=RCC_MCO
5869
PB10.Mode=Asynchronous
5970
PB10.Signal=USART3_TX
6071
PB11.Mode=Asynchronous
6172
PB11.Signal=USART3_RX
73+
PB8.Locked=true
74+
PB8.Signal=S_TIM4_CH3
6275
PC14-OSC32_IN.Mode=LSE-External-Oscillator
6376
PC14-OSC32_IN.Signal=RCC_OSC32_IN
6477
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
@@ -98,7 +111,7 @@ ProjectManager.ToolChainLocation=
98111
ProjectManager.UAScriptAfterPath=
99112
ProjectManager.UAScriptBeforePath=
100113
ProjectManager.UnderRoot=false
101-
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true
114+
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_USART3_UART_Init-USART3-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true
102115
RCC.ADCFreqValue=12000000
103116
RCC.ADCPresc=RCC_ADCPCLK2_DIV6
104117
RCC.AHBFreq_Value=72000000
@@ -110,22 +123,38 @@ RCC.APB2TimFreq_Value=72000000
110123
RCC.FCLKCortexFreq_Value=72000000
111124
RCC.FamilyName=M
112125
RCC.HCLKFreq_Value=72000000
113-
RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler,VCOOutput2Freq_Value
114-
RCC.MCOFreq_Value=72000000
126+
RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,RCC_MCOSource,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler,VCOOutput2Freq_Value
127+
RCC.MCOFreq_Value=36000000
115128
RCC.PLLCLKFreq_Value=72000000
116129
RCC.PLLMCOFreq_Value=36000000
117130
RCC.PLLMUL=RCC_PLL_MUL9
118131
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
132+
RCC.RCC_MCOSource=RCC_MCO1SOURCE_PLLCLK
119133
RCC.SYSCLKFreq_VALUE=72000000
120134
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
121135
RCC.TimSysFreq_Value=72000000
122136
RCC.USBFreq_Value=48000000
123137
RCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5
124138
RCC.VCOOutput2Freq_Value=8000000
139+
SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1
140+
SH.S_TIM3_CH1.ConfNb=1
141+
SH.S_TIM4_CH3.0=TIM4_CH3,PWM Generation3 CH3
142+
SH.S_TIM4_CH3.ConfNb=1
143+
TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
144+
TIM3.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period,Pulse-PWM Generation1 CH1
145+
TIM3.Period=10000-1
146+
TIM3.Prescaler=7200-1
147+
TIM3.Pulse-PWM\ Generation1\ CH1=50
148+
TIM4.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
149+
TIM4.IPParameters=Channel-PWM Generation3 CH3
125150
USART2.IPParameters=VirtualMode
126151
USART2.VirtualMode=VM_ASYNC
127152
USART3.IPParameters=VirtualMode
128153
USART3.VirtualMode=VM_ASYNC
129154
VP_SYS_VS_Systick.Mode=SysTick
130155
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
156+
VP_TIM3_VS_ClockSourceINT.Mode=Internal
157+
VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
158+
VP_TIM4_VS_ClockSourceINT.Mode=Internal
159+
VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT
131160
board=custom

bsp/stm32/stm32f103-keysking-learning/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
/*#define HAL_SMARTCARD_MODULE_ENABLED */
6565
/*#define HAL_SPI_MODULE_ENABLED */
6666
/*#define HAL_SRAM_MODULE_ENABLED */
67-
/*#define HAL_TIM_MODULE_ENABLED */
67+
#define HAL_TIM_MODULE_ENABLED
6868
#define HAL_UART_MODULE_ENABLED
6969
/*#define HAL_USART_MODULE_ENABLED */
7070
/*#define HAL_WWDG_MODULE_ENABLED */

bsp/stm32/stm32f103-keysking-learning/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c

Lines changed: 111 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@
5858
/* USER CODE BEGIN 0 */
5959

6060
/* USER CODE END 0 */
61-
/**
61+
62+
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
63+
/**
6264
* Initializes the Global MSP.
6365
*/
6466
void HAL_MspInit(void)
@@ -81,6 +83,114 @@ void HAL_MspInit(void)
8183
/* USER CODE END MspInit 1 */
8284
}
8385

86+
/**
87+
* @brief TIM_Base MSP Initialization
88+
* This function configures the hardware resources used in this example
89+
* @param htim_base: TIM_Base handle pointer
90+
* @retval None
91+
*/
92+
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
93+
{
94+
if(htim_base->Instance==TIM3)
95+
{
96+
/* USER CODE BEGIN TIM3_MspInit 0 */
97+
98+
/* USER CODE END TIM3_MspInit 0 */
99+
/* Peripheral clock enable */
100+
__HAL_RCC_TIM3_CLK_ENABLE();
101+
/* USER CODE BEGIN TIM3_MspInit 1 */
102+
103+
/* USER CODE END TIM3_MspInit 1 */
104+
}
105+
else if(htim_base->Instance==TIM4)
106+
{
107+
/* USER CODE BEGIN TIM4_MspInit 0 */
108+
109+
/* USER CODE END TIM4_MspInit 0 */
110+
/* Peripheral clock enable */
111+
__HAL_RCC_TIM4_CLK_ENABLE();
112+
/* USER CODE BEGIN TIM4_MspInit 1 */
113+
114+
/* USER CODE END TIM4_MspInit 1 */
115+
}
116+
117+
}
118+
119+
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
120+
{
121+
GPIO_InitTypeDef GPIO_InitStruct = {0};
122+
if(htim->Instance==TIM3)
123+
{
124+
/* USER CODE BEGIN TIM3_MspPostInit 0 */
125+
126+
/* USER CODE END TIM3_MspPostInit 0 */
127+
__HAL_RCC_GPIOA_CLK_ENABLE();
128+
/**TIM3 GPIO Configuration
129+
PA6 ------> TIM3_CH1
130+
*/
131+
GPIO_InitStruct.Pin = GPIO_PIN_6;
132+
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
133+
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
134+
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
135+
136+
/* USER CODE BEGIN TIM3_MspPostInit 1 */
137+
138+
/* USER CODE END TIM3_MspPostInit 1 */
139+
}
140+
else if(htim->Instance==TIM4)
141+
{
142+
/* USER CODE BEGIN TIM4_MspPostInit 0 */
143+
144+
/* USER CODE END TIM4_MspPostInit 0 */
145+
146+
__HAL_RCC_GPIOB_CLK_ENABLE();
147+
/**TIM4 GPIO Configuration
148+
PB8 ------> TIM4_CH3
149+
*/
150+
GPIO_InitStruct.Pin = GPIO_PIN_8;
151+
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
152+
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
153+
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
154+
155+
/* USER CODE BEGIN TIM4_MspPostInit 1 */
156+
157+
/* USER CODE END TIM4_MspPostInit 1 */
158+
}
159+
160+
}
161+
/**
162+
* @brief TIM_Base MSP De-Initialization
163+
* This function freeze the hardware resources used in this example
164+
* @param htim_base: TIM_Base handle pointer
165+
* @retval None
166+
*/
167+
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
168+
{
169+
if(htim_base->Instance==TIM3)
170+
{
171+
/* USER CODE BEGIN TIM3_MspDeInit 0 */
172+
173+
/* USER CODE END TIM3_MspDeInit 0 */
174+
/* Peripheral clock disable */
175+
__HAL_RCC_TIM3_CLK_DISABLE();
176+
/* USER CODE BEGIN TIM3_MspDeInit 1 */
177+
178+
/* USER CODE END TIM3_MspDeInit 1 */
179+
}
180+
else if(htim_base->Instance==TIM4)
181+
{
182+
/* USER CODE BEGIN TIM4_MspDeInit 0 */
183+
184+
/* USER CODE END TIM4_MspDeInit 0 */
185+
/* Peripheral clock disable */
186+
__HAL_RCC_TIM4_CLK_DISABLE();
187+
/* USER CODE BEGIN TIM4_MspDeInit 1 */
188+
189+
/* USER CODE END TIM4_MspDeInit 1 */
190+
}
191+
192+
}
193+
84194
/**
85195
* @brief UART MSP Initialization
86196
* This function configures the hardware resources used in this example

bsp/stm32/stm32f103-keysking-learning/rtconfig.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@
148148
#define RT_USING_SERIAL_V1
149149
#define RT_SERIAL_USING_DMA
150150
#define RT_SERIAL_RB_BUFSZ 64
151+
#define RT_USING_PWM
151152
#define RT_USING_PIN
152153
/* end of Device Drivers */
153154

@@ -412,6 +413,9 @@
412413
#define BSP_STM32_UART_V1_TX_TIMEOUT 2000
413414
#define BSP_USING_UART2
414415
#define BSP_USING_UART3
416+
#define BSP_USING_PWM
417+
#define BSP_USING_PWM3
418+
#define BSP_USING_PWM3_CH1
415419
/* end of On-chip Peripheral Drivers */
416420

417421
/* Board extended module Drivers */

0 commit comments

Comments
 (0)