STM32学习笔记
一、使用J-LINK下载器下载程序的方法
开发板与电脑连接成功后,打开keil软件,点击project,选择open project打开相应的工程文件,点击Rebuild对程序进行编译,选择魔术棒,选择Debug,在use一栏中选择J-LINK下载器,点击Setting,观察TDO是否读取,若读取成功,点击确定,点击OK。
注意:修改程序后,一定要记得对程序重新编译,否则下载成功后,依然是修改前的程序。
二.keil软件如何设置中文注释
打开keil软件,选择Edit,选择configuration,选择Editor,在Encoding一栏里选择chinseGB2312(中文简体),点击OK即可。
三.keil软件如何调用Project窗口并锁定
打开keil软件,选择View,选择Project Window,调出Project 窗口,如果未锁定在keil界面左侧,则点击鼠标右键,点击Docking即可将Project 窗口锁定在keil界面左侧。(其余窗口的调用同上)。
四、使用USB串口及FLYMCU软件下载程序的方法
开发板与电脑通过USB串口连接后,打开FLYMCU软件,点击搜索串口,选择Port,选择工程文件里边的OBJ文件,选择.Hex文件,点击开始编程即可。
注意事项:
(1)需要勾选“校验”,“编程后执行”,“编程前重装文件”,其余均不勾选,尤其不能勾选“编程到FLash时写选项字节”。
(2)点击开始编程前,切记要关闭sscom串口调试软件。
(3)有些开发板会设置拨动开关,用于选择供电方式:USB供电或者外部DC供电。
五、STM32相关文件的含义及作用
1.main.c是用来编写main函数,即主函数入口。Stm32f10x_it.c中主要用来定义部分中断服务函数。System_stm32f10x.c主要定义System等时钟函数。
2.HARDWARE分组是提供外部硬件的相关驱动代码,一个源文件对应一个头文件。
3.SYSTEM分组是ST提供的常用公用代码,包括Systick延时函数,IO口位操作以及串口相关函数。
4.CORE分组用来存放软硬件库核心文件和启动文件,文件内容用户一般不需要修改。
5.FWLIB下面存放ST官方提供的外设软硬件库源文件和头文件。文件内容用户一般不需要修改。
6.README.txt是开发板相关的硬件接口说明,以及实验中的注意事项、实验的过程和实验现象,通过这个文件一般就可以做实验了。
7.stdint.h用来存放C语言的标准表达方式。
8.Stm32f10x.h主要是用来兼容旧版本。
9.Core_cm3.h主要针对动态、静态变量修饰符做出类型扩展。
六、常见的函数名
1.delay_ms和delay_us延时函数,其中1s=1000ms,1s=1000000us。
2.Int main()主函数。
七、GPIO工作模式
类别 | 模式 | 简介 | GPIO_Mode |
通用输出 | 推挽(push-pull) | 可以输出真正的高低电平 | GPIO_Mode_Out_PP |
开漏(Open-Drain) | 输出低电平,如果需要输出高电平,必须接上拉电路 | GPIO_Mode_Out_OD |
复用输出 | 推挽(push-pull) | 连接片上外设,控制输出 | GPIO_Mode_AF_PP |
开漏(Open-Drain) | 连接片上外设,控制输出 | GPIO_Mode_AF_OD |
输入 | 模拟输入 | 信号源必须在施密特触发器之前 | GPIO_Mode_AIN |
浮空输入 | 电平是不确定的,完全由外部输入决定 | GPIO_Mode_IN_FLOATING |
下拉输入 | 内部有下拉电路,输入为低电平 | GPIO_Mode_IPD |
上拉输入 | 内部有上拉电路,输入为高电平 | GPIO_Mode_IPU |
八.STM32的输出模式配置表
MODE[1:0] | 意义 |
00 | 保留 |
01 | 最大输出速度为10MHZ |
10 | 最大输出速度为2MHZ |
11 | 最大输出速度为50MHZ |
九、问题汇总
1.出现Flash Download failed-“Cortex-M4”的处理方法
解决措施:重新连接下载器。
2.sscom串口调试助手收到的按键发送的字符串出现了乱码。
解决措施:修改代码规定的字符串长度
3.sscom串口调试助手收到的按键发送的字符串在换行时出现对不齐的现象。
解决措施:一个汉字占两个字节,一个换行符占2个字节,要精准计算字符串长度。
4.USB转RS232模块与电脑连接后,模块RXD灯黄色常亮,电源指示灯常亮,模块盒未进入准工作状态。
解决措施:将RS232数据线重新连接,模块RXD黄灯熄灭,电源指示灯常亮,模块盒处于准工作状态。
5.USB转RS232模块与电脑连接后,模块盒进入准工作状态,串口调试助手与模块盒无法建立通信。
解决措施:打开电脑的设备管理器,重新设置新的端口号,反复测试,直到找到可以通信的端口。
6.USB转RS232模块与电脑连接后,模块盒与串口调试助手建立通信后,使用STM32开发板按键向串口调试助手发送字符串,串口调试助手无法收到字符串。
解决措施:使用跳线帽将STM32开发板的232 TX 和 RX2 短接,232 RX 和 TX2 短接。
7.上拉输入和下拉输入的区别
(1)上拉输入:有上拉电阻
按键未按下时端口接高电平,既高电平1状态---3.3V,按键按下时端口接低电平,既低电平0状态---0V。
注释:按键KEY2对应PC0,按键KEY3对应PC13,按键KEY2和KEY3设置为上拉输入并进行初始化。
(2)下拉输入:有下拉电阻
按键未按下时端口接低电平,既低电平0状态---0V,按键按下时端口接高电平,既低电平1状态---3.3V。
注释:按键KEY1对应PA0,设置为下拉输入并进行初始化。
8.Usart串口初始化
(1)GPIO口设置
注意:GPIO口设置需要修改的内容已用红线标注。
(2)NVIC设置
注意:NVIC设置只需要修改串口号,已用红线标注。
NVIC的全称是Nested vectoredinterrupt controller,既嵌套向量中断控制器。控制着整个芯片中断相关的功能,通过对NVIC寄存器进行配置可以实现对内核和片上外设的中断的控制。但是各个芯片厂商在设计芯片的时候会对Cortex-M4内核里面的NVIC进行裁剪,把不需要的部分去掉,所以说STM32的NVIC是Cortex-M4的NVIC的一个子集,只是用到了NVIC的一部分功能,其余的保留以后备用。
STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
①占先式优先级:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来,那么高子优先级的中断优先被响应。
②副优先级:在抢占式优先级相同的情况下,如果有低子优先级中断正在执行,高子优先级的中断要等待已被响应的低子优先级中断执行结束后才能得到响应,即子优先级不支持中断嵌套。
(3)串口初始化
注意:USART初始化设置只需要修改串口号,已用红线标注。
9.按键KEY初始化
注意:KEY初始化设置需要修改的内容已用红线标注。
10.LED初始化
注意:LED初始化设置需要修改的内容已用红线标注。
11.SPI初始化
注意:SPI初始化设置需要修改的内容已用红线标注。
(1)定义:SPI 全称是 Serial Perripheral Interface,也就是串行外围设备接口。SPI 是 Motorola 公司推出的一种同步串行接口技术,是一种高速、全双工的同步通信总线, SPI 时钟频率相比 I2C 要高很多,最高可以工作在上百 MHz。SPI 以主从方式工作,通常是有一个主设备和一个或多个从设备,一般 SPI 需要4 根线,但是也可以使用三根线(单向传输)。
(2)SPI四线
①CS/SS, Slave Select/Chip Select,这个是片选信号线,用于选择需要进行通信的从设备。I2C 主机是通过发送从机设备地址来选择需要进行通信的从机设备的, SPI 主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可。
②SCK, Serial Clock,串行时钟,和 I2C 的 SCL 一样,为 SPI 通信提供时钟。
③MOSI/SDO, Master Out Slave In/Serial Data Output,简称主出从入信号线,这根数据线只能用于主机向从机发送数据,也就是主机输出,从机输入。
④MISO/SDI, Master In Slave Out/Serial Data Input,简称主入从出信号线,这根数据线只能用户从机向主机发送数据,也就是主机输入,从机输出。
SPI 通信都是由主机发起的,主机需要提供通信的时钟信号。主机通过 SPI 线连接多个从设备的结构如下图所示:
(3)SPI 有四种工作模式,通过串行时钟极性(CPOL)和相位(CPHA)的搭配来得到四种工作模式:
①CPOL=0,串行时钟空闲状态为低电平。
②CPOL=1,串行时钟空闲状态为高电平,此时可以通过配置时钟相位(CPHA)来选择具体的传输协议。
③CPHA=0,串行时钟的第一个跳变沿(上升沿或下降沿)采集数据。
④CPHA=1,串行时钟的第二个跳变沿(上升沿或下降沿)采集数据。
即:①CPOL=0,CPHA=0;②CPOL=0,CPHA=1;③CPOL=1,CPHA=0;④CPOL=1,CPHA=1;
(4)SPI的时序图
MOSI波形图显示的二进制数11010010换算成十六进制数为0XD2,MISO波形图显示的二进制数1100110换算成十六进制数为0X66。
LSB:代表二进制中的最小的单位,可以用来指示数字很小的变化。也就是说,LSB是一个二进制数字中的第0位(即最低位),具有权值为2^0,可以用来检测数的奇偶性。
MSB:代表一个n位二进制数字中的n-1位,具有最高的权值2^(n-1)。对于有符号的二进制数,负数采用反码或补码形式,此时MSB用来表示符号,MSB为1表示负数,0表示正数。
十、汉字取模软件PCtoL2002的使用方法
1.初始界面
2.设置字模参数
3.输入汉字,生成字模。
4.整理字模形式
5.将整理好的字模加入到字库文件font.h中
注意事项:
(1)汉字取模要一个字一个字进行取模,否则会造成乱码。
(2)生成的点阵,切记不要少逗号。
(3)修改汉字时,点阵和输出的汉字都要修改,方能正确显示。