如何学习
学前准备
入门级视频教程:鑫鑫stm32 初学者视频教程,PS:最好先下个keil uvision4安装上
进阶级视频教程:刘洋老师边讲边写stm32
编程前还需要一本stm32库函数手册。
没有开发板也没事,IDE里面有仿真器,但最好有一个开发板。因为只有软件,不会接线配电平什么的也不行
学习套路
首先,把片上外设学一遍,就ok了
其次,通过做项目练习综合使用
最后,进阶的话可以看看寄存器级的开发,以及内部储存空间的分配(可以试着写写iap)
注意事项
一开始不着急,可以先把程序整明白。就是学会怎么启动以及配置各个外设就行了。官方的库函数都已经封装好了,多数情况下都不需要直接操作底层的寄存器。如果官方的库里没有这个功能的代码,就只能自己通过设置对应寄存器解决
教程不针对某一块特定的开发板,因为说白了单片机就是一芯片,开发板无非就是把片上外设的引脚印出来接了LED什么的东西,自己也能做的
学的时候记得看电路图,如果你想做开发板上的实验的话,一定要有对应的电路图,因为不同板子GPIO的引脚配置不一样
资料整理
刚刚给你的手册既有库函数的,也有寄存器的。你可以直接从库函数开发学起,但一定要有寄存器的概念
XCOM是烧写片上程序的时候用的,因为现在的板子大多用usb口,都不是Jlink的,所以就用XCOM往板子上烧写,缺点就是没法实时调试。一个Jlink正版仿真器成本有点高,你一开始也未必用得上
首要做的事情
先从最基本的写程序开始吧,小的程序IDE里调试过了上板子基本就不会有问题
等你把片上外设都学完了会用了之后再跟你说我做的那个IAP实验吧,那个作为进阶练习,可以让你对单片机理解更深一层
细节
加油,别放弃。看教程的时候耐心点,多总结,多记笔记,有好处
视频有点长,开始的时候可以边讲边写,后来有了基础后建议你看清楚外设的使用流程后自己写,不懂的地方再回头对照。
主要就是使用流程、配置参数这些环节记准了就没问题,一些小细节不必深究。千万别亦步亦趋只跟着抄代码,那样看完视频也学不会的。
多查手册,多查手册,多查手册
搭建环境
- 安装jlink驱动器。如果能够在设备管理器中看到,jlinkdrive说明jlink的驱动安装成功了。
- 安装keil5,但是需要安装连个legacy support,这个可以根据keil5的提示到给出的链接上下载,把那两个都下载下来,然后安装。
按照操作步骤将程序下载到开发板上即可。
GPIO
General Purpose Input Output.称为总线扩展器。如果外设有n只脚的话,那么gpio占了1/n.而好处是,能够通过软件编程设置gpio的高低电压,进而控制外设。
- stm32中共有7个gpio,每个gpio有16个引脚。
在编程中如果要使用gpio的话。
使用jlink调试的时候需要将boot调节到flash上即可。
- 使用串口调试的时候,方式是不同的。
- 板子需要进行供电,使用USB TO UART口进行供电就行,另一端直接连接在电源上即可。
跨文件引用的函数不要使用static进行修饰
尚未理解的代码
///这段代码适合等头脑清醒的时候进行阅读
#define LED1_TOGGLE digitalToggle(GPIOB,GPIO_Pin_0)
#define LED1_OFF digitalHi(GPIOB,GPIO_Pin_0)
#define LED1_ON digitalLo(GPIOB,GPIO_Pin_0)#define digitalHi(p,i) {p->BSRR=i;}
#define digitalLo(p,i) {p->BRR=i;}
#define digitalToggle(p,i) {p->ODR^=i;尚需掌握的技能
调试
中断
NVIC(Nest Vectored Interrupt Controller内嵌向量中断控制器)。
- EXTI(外部中断)
- 将gpio作为中断的处理流程
- GPIO初始化
- 将gpio脚连接到extiline上。
- exti初始化
- nvic初始化
当中断到来后
头文件是要书写的,相应的.c文件需要引用的头文件全部包含在.h头文件中,在.c文件中只需要包含响应的.h文件即可,这样的话,在编译相应的.c文件的时候.h文件已经进行了编译。当在main函数中进行包含的时候不会再次进行编译,但是已经告诉main函数,要把这个文件包含进来,而这个文件中有响应函数的声明。
SysTick
所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。
常用术语
微控制单元(Microcontroller Unit;MCU)
需要解决的问题
通过串口未能成功将文件下载到开发板上。
ADC
参考电压:测量物体的长度要用卷尺,精确测量要用游标卡尺,同理,ADC 测量电压也要有标准电压做基准。如八位并行比较型 ADC ,把参考电压均分为 256 层,就好像卷尺的刻度,输入的待测电压与哪一个分层相等,数值就知道了。
经验
下一次在进行32的编程的时候,直接把头文件中的结构体的数据成员复制过来,这样简直就是太方便了,因为每个数据成员都有相应的十分详细的解释。
与C语言不同之处
C语言中的unsigned long的个格式化输出占位符是lu;但是在stm32中编译环境是Keil中的时候就变成了ul。这是自己不能够理解的地方。