遇见很多无厘头的问题让人实在头疼
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://www.cnblogs.com/wenhao-Web/p/13820320.html
根据这篇文章实现了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开启之前 或者在最后 结果都不太对,只能夹在中间才有效。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
2024-01-07 verilog勘误系列之-->算术运算符运算失败