STM32的工程建立
1.调整字体,在扳手中,color&font中选择C/C++和ASM都为142.编码格式也在扳手中,在edit中改为UTF-83.把tab改为4,也在扳手中。
开发方式
基于寄存器(底层)和基于库函数(推荐)和HAL库(隐藏底层逻辑)
安装固件库()stdperiph
新建工程
1.桌面新建一个文件夹用于存放以后的工程
2.在文件夹里面新建一个一个文件夹用于存放本次的工程,方便改,因此再这个文件夹说明该工程的作用
3.再新建工程名字(project)不方便改
4.选择型号
此时工程建好了,但是无法使用,要添加必要文件(固件库中
)
5.打开CMSIS-CM3-DEVICESUPPORT-ST ST32F10X-STARTUP-ARM(里面是32的启动文件),复制粘贴(注意新建一个文件夹用于存放,避免太乱了)
6.同时再STM32F10X下能够看到有一个stm32开头(为STM32外设寄存器的描述文件,用来描述STM32有哪些寄存器和寄存器对应地址)和两个system开头的文件(主要用来配置时钟),将这些文件也存放到start下
7.STM32是由内核和内核外围的设备组成的,且内核的寄存器和外围设备的描述文件不在一起,还需要添加内核寄存器的描述文件(再core support下),其.c文件包含对内核的一些配置
也放到start下
到此工程的必要文件复制完成
此时打开keil,将source group改成Start,添加文件,其中启动文件只添加md(一个芯片对应一种类型的启动文件),其余全部添加(按住crtl可以依次选择)
8.最后在工程选项中添加这个文件夹的头文件路径(魔术棒中)
此时可以新建一个main函数用于查看工程是否可行(打开文件夹,即本次工程的文件夹比如2-1STM32工程模板),新建User,main函数放在这里
9.回到keil中在target右键添加组User,新建名字叫main,注意要存放在User中,一定要现在文件夹中新建文件夹再在keil中添加group
此时开始写main函数
1右键加入头文件
此时工程还没有加入STM32的库函数,因此目前还是基于寄存器开发的工程(已经可以用于使用寄存器开发)
开始上板子,用STLINK连接,记得选debug,然后setting中选择RESET AND RUN
结果烧录直接这样,wdf
Load "D:\\桌面\\STM32project\\2-1 STM32工程模板\\Objects\\project.axf" _____^ *** error 56: cannot open file Error: Flash Download failed - Could not load file 'D:\桌面\STM32project\2-1 STM32工程模板\Objects\project.axf' Flash Load finished at 23:06:49
此时我查看Oject中发现没有生成axf文件,但是点了rebuild之后竟然可以烧录了
原因
✅ 为什么只点 Translate(F7) 无法生成 .axf 文件?
因为:
Translate 只会 编译单个文件(比如你当前打开的 .c 或 .s 文件),不会进行链接。
即使你点击了 Build(默认是 Build Target):
它也只会 编译发生变化的文件,不会强制重新链接整个项目。
所以如果你之前没有生成过 .axf,或者链接阶段没有执行,就不会生成最终的可执行文件。
✅ 为什么 Rebuild(Ctrl + F7) 成功生成了 .axf?
因为:
Rebuild = Clean + Build
它会:
先删除所有旧的目标文件(.o, .axf 等)
再重新编译所有源文件
最后调用链接器(linker)生成最终的 .axf 文件
所以当你点击 Rebuild 后,Keil 正确地完成了链接步骤,.axf 文件就生成了。
📌 总结一句话:
Translate(F7)只负责编译代码,不负责链接;只有 Rebuild(Ctrl + F7)才会完整地生成最终的可执行文件 .axf。
J解决这问题之后开始配置寄存器点灯(只需要三个寄存器)
第一个寄存器:GPIO都是APB2的外设,因此在APB2外设时钟中使能寄存器(ENABLE)

将4置为1,就是打开gpioC的时候,将二进制换成16进制即0000 0010
第二个寄存器,配置PC13口的模式


其中的CNF13和MODE13用于配置13口,CNF应该配置位推挽输出模式,即00;MODE要配置位输出模式,最大速度可以给50MHZ,即11,
整个寄存器即0030 0000
接下来既可以配置端口输出数据寄存器

其中13写1就是高电平,0就是低电平,即为0000 2000;给低电平才亮

以后要注意编译选build不要translate
该操作方式把其他口也点了,若想只配置一个,要使用&=和|=的操作
以上内容就是使用寄存器电灯,接下来使用库函数
新建文件夹Library用于存放库函数
yi

以上便是标准外设驱动存放的位置,src中就是库函数的源文件,misc是内核的库函数,其他都是内核外的外设库函数而inc中就是头文件
放好后

随后在keil中新建library,加入所有库函数,加入后此时还不能使用,还需要一个文件
打开以下文件位置

其中conf是用来配置库函数头文件的包含关系,里面还包含用来参数检查的函数定义,两个it文件用来存放中断函数
把这三个文件放到User下,再打开KEIL将文件加入;
之后还需要宏定义,在头文件右键打开宏定义

其中
意为:如果你定义了USE_STDPERIPH_DRIVER(使用标准外设驱动)这个字符串,下面的语句#include "stm32f10x_conf.h"才有效
将该字符串复制放到以下位置

这样才能包含标准外设库,也就是库函数,也不要忘记把library和user的路径添加
此时基于库函数的工程建好了
箱子用来调节文件上下位置
接下来是库函数点灯
步骤类似
①使能时钟GPIOC的时钟
②配置端口模式(使用了结构体配置参数)
③配置端口的高低电平;
注释里面只能这样操作,选中一个东西直接ctrl f可以直接查找

意为GPIOPIN的定义有很多个,选择(member)
最后的完整代码

ps:
1.调整字体,在扳手中,color&font中选择C/C++和ASM都为14
2.编码格式也在扳手中,在edit中改为UTF-8
3.把tab改为4,也在扳手中
更多推荐



所有评论(0)