图片.png

    uvprojx 文件就是我们平时双击打开的工程文件,它记录了整个工程的结构,如芯片类 型、工程包含了哪些源文件等内容。
    uvoptx 文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及 当前已打开的文件等等。
    uvguix 文件记录了 MDK 软件的 GUI 布局,如代码编辑区窗口的大小、编译输出提示 窗口的位置等等。

    keil使用:

    1.下载软件 F8
    2.自带的虚拟示波器:
    https://blog.csdn.net/weixin_43737995/article/details/98049869
    3.一些工具图片.png
    图片.png
    (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.重新分配各模块引脚定义