uvprojx 文件就是我们平时双击打开的工程文件,它记录了整个工程的结构,如芯片类 型、工程包含了哪些源文件等内容。
uvoptx 文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及 当前已打开的文件等等。
uvguix 文件记录了 MDK 软件的 GUI 布局,如代码编辑区窗口的大小、编译输出提示 窗口的位置等等。
keil使用:
1.下载软件 F8
2.自带的虚拟示波器:
https://blog.csdn.net/weixin_43737995/article/details/98049869
3.一些工具
(1)编辑选项卡。用来设置一些编辑信息,比如缩进的设置,显示行号设置,界面显示效果等等。
(2)设置代码、关键的颜色和字体。如果默认的关键字颜色,代码颜色,代码字体、大小不符合你的习惯,可以在这里进行更该,在这里还可以更改用户自定义关键字。
(3)设置用户关键字。非常非常好用的一个功能,它可以使你自己定义的关键字像系统关键字一样高亮显示
keil 中的error:
1.eg:出现 Symbol xxx multiply defined (by exti.o and main.o). //变量被多重定义
改正:把定义的变量放在主文件main.c中,并在exti.h中添加extern来外部引用此变量来用。
2.warning: function “XXX” declared implicitly
改正:函数使用前需要声明(头文件)
3.warning: #1-D: last line of file ends without a newline
影响:避免当被include的文件展开时,前一个文件的最后一行与后一个文件的第一行直接连接成一行,造成错误。
改正:一般每个.c和.h文件,都要在最后留一个空行。
4.warning: missing return statement at end of non-void function “XXX”
改正:添加return语句(要有返回值)
条件编译#ifdef的妙用:
(1)最常见的条件编译是防止重复包含头文件的宏
1.#ifndef ABCD_H
2.#define ABCD_H
3.……………………
4.#endif //#ifndef ABCD_H
(2)defined用来测试某个宏是否被定义。
defined(name): 若宏被定义,则返回1,否则返回0。
它与#if、#elif、#else结合使用来判断宏是否被定义,乍一看好像它显得多余, 因为已经有了#ifdef和 #ifndef。
但defined可用于在一条判断语句中声明多个判别条件;#ifdef和#ifndef则仅支持判断一个宏是否定义。
eg: #if defined(RES)&&defined(UNIX)&&!defined(DEBUG)
((3)#undef 取消宏的定义)
STM32F103RCT6移植到STM32F103C8T6注意事项:
1,修改芯片型号为STM32F103C8
2.修改晶振为8.0M
3.修改C/C++宏定义:
由STM32F10X_**HD,USESTDPERIPH_DRIVER 改为 STM32F10XMD**,USE_STDPERIPH_DRIVER
4.替换启动文件,由startup_stm32f10x_hd.s修改为startup_stm32f10x_md.s
5.重新分配各模块引脚定义