1, 方法论
学习STM32的时候需要参考什么资料,应该怎么查找呢?先了解一下大致的框架再系统学习,就算以后忘记很多概念了,重拾起来也容易把;
1.1 F10XXX中文参考手册:包含寄存器的详细信息,技术参考手册;主要是各种外设的参考信息;
1.2 Cortex-M3 技术参考手册:关于Cortex-M3核心、SysTick定时器和NVIC的详细说明;
1.3 Cortex-M3 编程手册:关于Cortex-M3核心、SysTick定时器和NVIC等内核外设的详细说明;主要是内核功能的信息;
1.4 Cortex-M3 权威指南:对底层及ARM架构的分析,包含部分底层汇编说明;主要参考cortex-xx编程手册;
1.5 芯片数据手册:芯片功能框架图,地址映射,引脚复用,芯片型号的具体解释;
1.6 对于stm32相关的参考资料,在官网搜型号,然后点进去即可看到;cube的话直接搜cube,hal库和cmsis软件接口标准包含在STM32CubeH7中;
2 STM32官方提供的库
STM32官方提供了两种方便底层开放的库,分别是标准库和HAL库;HAL库逐渐取代了标准库的使用;
后来估计觉得库的效率也很慢,提供了cubeMX来配置HAL库开发;
2.1 STM32标准库:STM32F10x_StdPeriph_Lib_V3.5.0.zip
解压后,project目录下为ST官方评估板的例程;Libraries目录下为Cortex-M3的内核代码;我们只需要使用Libraries目录下的文件;
2.2 Cortex-M3内核的代码架构;
CMSIS全称Cortex-M3 software interface standard,是API接口标准;
Libraries目录下的内核代码,将底层寄存器操作封装成API函数,函数符合CMSIS标准的格式;
3 新建KEIL5工程
keil界面设置:edit->configuration-> editor-> [Encoding:GB2312] [Tabsize:4]->其他酌情设置;
3.1 磁盘新建文件夹,从固件库复制各种文件过来
3.1.1 CORE:用来存放xx_cm3.c内核文件,xx.s启动文件,还有每种芯片自己的xx.h和xx.c文件;
不用修改,但是每次代码运行的时候都会需要启动文件来配置内存,代码起始位置等等;还是比较重要的;
配置错误报错举例:error: L6236E: No section matches selector - no section to be FIRST/LAST.(未加入xx.s文件)
3.1.2 USER:主要是main.c
3.1.3 HAL:官方hal库,如果用标准库那就命名为FIRM;
3.1.4 BSP:自己写的各种外设的例程统一放在这里;
3.2 keil5新建project
3.2.1 project -> new project -> 命名后保存在USER/workspace中->此时建立完成了keil5工程的框架;
3.3 映射project到磁盘文件
3.3.1 target右键->manage project items -> add group -> add file;添加.c文件和CORE目录下的配置文件(xx.h xx.s等)到工程中;
3.3.2 target右键-> options for target -> C/C++ ->Include Paths添加头文件目录(keil不会递归查找);添加.h文件到工程中
3.4 project配置
3.4.1 启动文件的宏配置
F1:target右键 -> options for target -> C/C++ -> Define: < STM32F10X_HD,USE_STDPERIPH_DRIVER >;
H7:target右键 -> options for target -> C/C++ -> Define: < USE_HAL_DRIVER, STM32H743xx >;
3.4.2 生成hex文件(../USER/objects/)
target右键 -> options for target -> output -> √ create HEX file; 在 <output> 中可以设置生成的xxx.hex的name,也是xxx.axf的name;
3.4.3 生成bin文件
target右键 -> options for target -> user -> <after build/rebuild> √ Run #1 -> 输入如下格式路径:
D:MDK5SetupFileARMARMCCinfromelf.exe --bin -o E:STM2_F1CreateDemoUSERObjectsdemo.bin :STM32_F1CreateDemoUSERObjectscreateDemo.axf
3.5 软件仿真
3.5.1 target右键-> options for target -> Debug
->[• use simulator]
-> [左边的dialog DLL :DARMSTM.DLL ] [左边的parameter:-pSTM32F103ZE]
-> [右边的dialog DLL :TARMSTM.DLL ] [右边的parameter:-pSTM32F103ZE]
3.5.2 菜单栏 debug-> start/stop debug session
3.5.3 通过虚拟串口查看kei调试的串口;https://www.cnblogs.com/hiker-blogs/archive/2012/03/12/2392273.html
mode com1 115200,0,8,1 :设置计算机的com1口为串口,后面的数据为串口的配置参数;
assign com1 <s1in>s1out :<s1in>s1out表示是单片机的串口1,assign com1表示将串口映射到com1上;
3.5.4 KEIL5的GPIO仿真:(PORTA & 0X00000002)>>1:仿真输出portA的pin1引脚的值;
(PORTA & 0X00000004)>>2:仿真输出portA的pin2引脚的值;
3.6 软件下载
3.6.1 串口下载使用的软件是flymcu.exe;串口收发数据使用的是xcom.exe或sscom.exe;
SWD无法下载的原因和解决办法(十分准确): https://www.cnblogs.com/qdrs/p/10574867.html
4 零散知识
(1)复用表示一个IO口有多个外设功能,通过复用来选择IO口的外设功能;
(2)重映像就是重映射;就是把一个IO口的功能映射到另一个IO口上去;
(3)1ul << 18 表示将无符号长整形的1左移18位,即第18位置1;
(4) 使用memset( )需要包含头文件#include<string.h>;
(4)STM32芯片型号说明,芯片的硬件信息还可以看选型手册和数据手册;
5 软件安装
5.1 对于keil-MDK而言,先安装keilXXX.exe,安装的是集成开发环境;然后安装pack包,安装的是对应器件的固件支持包;
5.2 对于cubeMX而言,先安装cubemx软件;然后在cube软件中help>embedded...安装对应器件的pack包;