前言:平时硬件涉及的多些,早些年写过PIC的程序;头两年用过STC的MCU,都是8位的片子。最近由于新的CASE可能会有更高的需求,所以想自学一下STM32这个32位的片子。虽然自认为有一定的软件基础,但STM32跟之前的知识可以说完全不同,期间几度想放弃,幸亏现在网络资源很强大,再查找大量资料后终于点亮了第一个LED灯程序,只是还有个问题依然没有解决,留到后面再说。
一、库函数和头文件
先前不论是PIC还是STC都是直接配置寄存器的方式来编程,但是看资料介绍STM很少用这种方式,大多数人是用标准外设库函数(貌似ST公司也开始淘汰这种方式了)和HAL函数库。刚开始我也是准备用HAL函数库的方式,因为很多操作都是图形化的,只是从ST官网下载PACK时总是失败,所以放弃了,改用KEIL+标准函数库的方式。网上很多资料和例子都是基于F1系列的,而我这次使用的是F4系列的片子,所以按照网上的资料各种复制粘贴“启动文件”和“头文件”,结果一编译全是错误,折腾了几天,最后终于找到了一个F4的教程才解决。
二、编译器版本
之前装的KEIL和ARM C编译器是6版本的,编译器时很多头文件里的字符都报“没有定义”的错,上午查资料才发现要用5版本的ARM C编译器。下载安装后终于编译成功了。
三、ST-LINK无法烧写程序
编译成功后就是用ST-LINK烧写到自己做的小板子,(注意是自己做的板子)但是始终提示找不到目标芯片,无论是用KEIL软件,还是STM32 ST-LINK Utility都一样,也去网上下了STM32CUBE PORG(好像是叫这个名字,此时已卸载)也一样找不到芯片。拿同事的板子,就能烧写,所以排除了ST-LINK本身的问题和接线的问题,也把芯片外围所有的元件都去掉了,还是BOOT0和BOOT1的各种组合,都是不行,包括有资料说要按住RESET脚烧写,反正是各种折腾都失败了。后来继续网上找资料,发现有人跟我同样的问题,TA的原因是有个VDD引脚没连好,我又去量了下,各个电源脚的电压都是正常的,突然想起来有个"VDDAREF+"脚我没用到,好像是悬空的,然后直接拉到VDD脚,终于能下载了。开心到飞起。。。。。。
四、程序烧写后不能运行
烧写提示成功后,LED灯并没有预期的亮起来,代码检查了几遍,确认是没有问题的,也更好过其它IO口试过。网上找资料,看到很多人说下载后要复位一下才能运行,结果试了一下,还真是这样的,至此总算能愉快的写代码了。
但转头一想,应该也有解决办法吧,再次问度娘,看到大部分方法都是在STLINK的设置里把“复位和自动运行”选上,还有个什么“ENABLE”的勾去掉。按此操作后,确实下载后会显示"Application running...",但硬件上还是没自动运行,需要复位一下才行。好在影响不大,那就后续再研究吧。
|