新手入门
- 积分
- 5
- 金钱
- 5
- 注册时间
- 2018-11-10
- 在线时间
- 3 小时
|
发表于 2018-11-10 10:55:51
|
显示全部楼层
本帖最后由 高山流水a 于 2018-11-13 00:05 编辑
以前用的AVR速度跟不上成为了我的研究瓶颈,因为如楼主一样很重要的需要STM32单片机进行PWM的编程,我10月25日初接触STM32单片机,最初STM32F103,时钟72M,花了5天学习,从原子论坛上下了一个别人调试成功的寄存器版PWM六路互补输出成功,但是速度还是显得捉襟见肘,必须得更高时钟的芯片,于是又买了F767与H743,由于初学此单片机,发现跨度是明显的,不经过细致的学习对比研究没法正常跨越,日以继夜的折腾了好多天获得的只是绝望,没办法成功,在网上下载了很多例程,没有真正对应调试成功的代码,只能自己参照改写都没办法成功,用原子的例子8PWM输出均难以成功,最终没办法就请了几天假在家专门研究。且在网上下了一个STM32F407的例程来改,3天过去了,让人非常的痛苦始终不能成功。所以楼主问F4与F7差异大不大,现实就这么大,别人在F103,F407等用着好好的,而在F7,H7上压根运行比登天还难。前几天也来到本贴真希望有人回复附上成功例子,但是天上没有掉馅饼。
昨晚准备放弃了,但在此时终究还想抓一根稻草。想着原子的例程8——PWM——TMI3能输出PB1,那么就继续以这个为起点去抽丝剥茧,怎么抽?
由于例子中头文件,调用等然让人眼花缭乱,压根找不到北,所以就从剔除头文件及不必要的关联调用文件开始。
剔除了led.c,led.h,timer.h,(启动文件,delay.c,sys.c,usart.c都不用去管),只剩下与PWM直接相关联的两个文件test.c,timer.c,删除的头文件必须的代码等均整合进timer.c.
整合过程中调整查找对应的参考手册,数据手册,用搜索功能查询每一个寄存器,删除每一个代码过程运行后就下载到开发板,看程序是否能正常运行,这样一个个的代码调整后,最终提取出了无复杂调用纯净的TIM3 PWM程序,在此纯净程序上对着手册寄存器一一对应改相应的定时器通道,I/0通道,复用等功能等等,最终就成功实现了TIM1六路互补PWM输出,其他定时器通道依样画葫芦一通皆通。
通过这个过程,突然发现自己对STM32系列的PWM编程任督二脉打通了,能举一反三,对STM32系列从F103,F407,F767,H743等的PWM都通过此法很轻松跨越实现了。最终均能实现SPWM正弦波输出。
其实真正的学习过程就得经历这样的过程才能实现真正的提升自己。
上述突破的方法希望对楼主有用,对其他需要的人也可以参考。
这就是我接触STM32 15天来的辛酸历程。
同时库函数版,很多人说使用简单,建议初学者从库函数版本开始学,但是从这15天来,我对函数版本一看就产生恐惧症,完全就是化简为繁,复杂臃肿,寄存器版本几行代码就能实现的,函数版本居然要几十行代码,代码量增加几倍上十倍,且无法正常让人理解其表达的含义,所以初学者个人建议从寄存器版本开始学。很多人推崇的STM32CubeMX这个工具更是让人抓狂,代码复杂不易懂且代码数量惊人。
2018.11.10 |
|