遇见很多无厘头的问题让人实在头疼
1.STM32 STLink v2
本来自己画一款控制板,开心焊接完后发现stlink用不了,本来之前一直使用usb typeC接口下载程序,后续因为特殊需求修改为只有stlink接口,但是发现用不来,不论如何修改stm32 cubeprogrammer都无法连接,一直出现no stm32 target found。
试过的方法有长按复位,长按boot, 下载状态长按复位, 下载状态长按boot,偶尔出现几次成功,但是成功得没有什么可重复性,最后更换了一个stlink,发现还有会出现问题,最后将频率降低后才连接上,可能是因为自己使用的杜邦线有点长?
2.IO输出不对
这个问题一般使用开发板可能不容易遇见,我是自己画的PCB,有自己特定的IO需求,但是你知道的,stm32的IO一个功能可能对应了好几个管脚,但是我设计原理图的时候就已经绑定好了IO管脚,但是在配置的时候,使用了默认的IO管脚,导致我在下载完程序过后,我希望的排针没有输出期望的波形,一直在反复修改代码,新建工程,始终不尽人意,最后发现是在CubeMx里面配置的IO和我设计原理图时的IO不一致,结果导致了这种乌龙情况,当时还以为自己原理图PCB设计错了, 但是仔细想想不至于如此,再次核对后发现是stm32可以进行IO管脚复用或者说一个功能可以使用多个管脚的某一个实现功能,自己画板的注意一下。
3.代码顺序
reference : https://blog.csdn.net/m0_75041317/article/details/144436904
根据这篇文章实现了PWM的移相控制,但是自己也是调试了好久,最后发现代码顺序也极为重要,否则不按照期望情况进行输出。
这是最终的代码:
HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim8, TIM_CHANNEL_1);
HAL_TIM_OC_Start_DMA(&htim8, TIM_CHANNEL_2, ccr_ch2, 2);
HAL_TIM_OC_Start_DMA(&htim8, TIM_CHANNEL_3, ccr_ch3, 2);
HAL_TIM_OC_Start_DMA(&htim8, TIM_CHANNEL_4, ccr_ch4, 2);
HAL_TIM_OC_Start(&htim8, TIM_CHANNEL_2);
HAL_TIMEx_OCN_Start(&htim8, TIM_CHANNEL_2);
HAL_TIM_OC_Start(&htim8, TIM_CHANNEL_3);
HAL_TIMEx_OCN_Start(&htim8, TIM_CHANNEL_3);
HAL_TIM_OC_Start(&htim8, TIM_CHANNEL_4);
HAL_TIMEx_OCN_Start(&htim8, TIM_CHANNEL_4);
最开始的时候我的DMA开启在PWM开启之前 或者在最后 结果都不太对,只能夹在中间才有效。
标签:htim8,HAL,IO,Start,stm32,TIM,最近,遇见,CHANNEL From: https://www.cnblogs.com/tiruo/p/18658304