/** if you want to use pwm you can use the following instructions. * * STEP 1, open pwm driver framework support in the RT-Thread Settings file * * STEP 2, define macro related to the pwm * such as #define BSP_USING_PWM1 * * STEP 3, copy your pwm timer init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end if board.c file * such as void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) and * void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) * * STEP 4, modify your stm32xxxx_hal_config.h file to support pwm peripherals. define macro related to the peripherals * such as #define HAL_TIM_MODULE_ENABLED * */
这是官方给的标准步骤,我按照这个步骤进行了好几遍都没有成功,错误每次都是几十个,(也多是我本身的问题),下面我分享下我成功的步骤。
STEP 1:
在RT-Thread Settings中使能PWM设备。
STEP 2:
注释掉board.h中关于PWM的宏定义。
函数
#define BSP_USING_PWM1 //你所使用的PWM /*#define BSP_USING_PWM2*/ /*#define BSP_USING_PWM3*/ #define BSP_USING_PWM1_CH1 //你使用的通道
STEP 3:
使用STM32CudeMX生成stm32f1xx_hal_msp.c文件。
文件位于Src文件夹下,打开文件咱们复制HAL_TIM_MspPostInit函数到drv_pwm.c文件下
spa
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) { GPIO_InitTypeDef GPIO_InitStruct = { 0}; if(htim->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspPostInit 0 */ /* USER CODE END TIM1_MspPostInit 0 */ __HAL_RCC_GPIOA_CLK_ENABLE(); /**TIM1 GPIO Configuration PA8 ------> TIM1_CH1 */ GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN TIM1_MspPostInit 1 */ /* USER CODE END TIM1_MspPostInit 1 */ } }
在drv_pwm.c文件下修改一处code
static void pwm_get_channel(void) { #ifdef BSP_USING_PWM1_CH1 stm32_pwm_obj[PWM1_INDEX].channel |= 1 << 0; __HAL_RCC_TIM1_CLK_ENABLE(); //修改处使能定时器时钟 #endif
STEP 4:
打开pwm_config.h文件,参照给的例子添加。默认是没有TIM1的。
blog
#ifdef BSP_USING_PWM1 #ifndef PWM1_CONFIG #define PWM1_CONFIG \ { \ .tim_handle.Instance = TIM1, \ .name = "pwm1", \ .channel = 0 \ } #endif /* PWM1_CONFIG */ #endif /* BSP_USING_PWM2 */ #ifdef BSP_USING_PWM2 #ifndef PWM2_CONFIG #define PWM2_CONFIG \ { \ .tim_handle.Instance = TIM2, \ .name = "pwm2", \ .channel = 0 \ } #endif /* PWM2_CONFIG */ #endif /* BSP_USING_PWM2 */
最后打开stm32f1xx_hal_conf.h图片
/*#define HAL_SRAM_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED //取消注释 #define HAL_UART_MODULE_ENABLED /*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */