STM32CubeIDE 外设设置注意点(CAN、TIMER等等)

    随记~!

    STM32CubeIDE运行环境友好,功能丰富,更新迅速,相比之前的keil等stm32开发环境要好很多,但是每一个新环境都有自己的坑。。。。

    1.CAN外设

        CAN在配置Cube环境时并没有滤波器选项,若不进行配置,则不能正常收发数据,需要在初始化函数完成后调用HAL_CAN_ConfigFilter函数完成滤波器配置。

        配置时在光勾选收发中断是无法进入CAN中断的,还需要手动开启CAN中断(__HAL_CAN_ENABLE_IT),并使能CAN(HAL_CAN_Start)才能正常进入中断。后面的中断操作就跟串口差不多了。官方未提供CAN的中断收发历程。。。。

        CAN的中断操作主要在3个发送完成回调和4个接收回调中完成。

    2.定时器

        定时器作为普通定时器使用时需要手动开启 HAL_TIM_Base_Start_IT 定时器中断,切记!!!!无论是否勾选定时器中断,定时器中断的处理可以统一在 HAL_TIM_PeriodElapsedCallback 函数中完成。

        定时器作为PWM输出时,有几个操作步骤:

        1> 定时器初始化

            PWM互补输出时,无论如何配置Cube,互补端均无法输出,参照库文件,发现互补输出端就没有使能,只能手动添加

htim1.Instance->CCER |= TIM_CCER_CC1NE,这句话使能了通道1的互补输出段端。

        2> PWM输出控制

             HAL_TIM_PWM_Start 和 HAL_TIM_PWM_Stop 函数就可以,算是库函数难得支持了。

        3> 占空比控制

            找遍了整个库函数均没有发现比较明显的函数能干这个事 ,总觉得这个事应该经常用的啊,没办法,只能调用宏定义实现(__HAL_TIM_SET_COMPARE),这个宏貌似 也不是干这个的。

    3.片上flash

        这个简单,至少不用初始化。

        but,切记(HAL_FLASH_Unlock)and(HAL_FLASH_Lock),切记单线程访问,注意中断现场保护,这样安全些。

       现场保护是这样的,在很多地方都会用到,类似于ucos的(OS_ENTER_CRITICAL() )和 (OS_EXIT_CRITICAL()  ) 

	
uint32_t ulReturn;

if (__get_IPSR() != 0)ulReturn = taskENTER_CRITICAL_FROM_ISR();
else taskENTER_CRITICAL();

//需要保护的东西

if (__get_IPSR() != 0)taskEXIT_CRITICAL_FROM_ISR( ulReturn );
else taskEXIT_CRITICAL();

     flash擦除函数(HAL_FLASHEx_Erase)和编程函数(HAL_FLASH_Program),在访问频繁是时可能出现操作失败的情况具体原因不慎清楚,我的做法是判断返回值,直到操作成功为止。

你可能感兴趣的:(STM32CubeIDE 外设设置注意点(CAN、TIMER等等))