uVision5新建stm32f10_工程模板的操作方法与点亮LED灯
设备型号:stm32f103c8t6最小系统 测试灯接口为PB12
当STM32设备为SWD接口
时连接DAP仿真器
硬件连接方式为
SWD_DIO
连接 仿真器的TMS数据引脚
SWD_CLK
连接 仿真器的TCK时钟引脚
烧录时boot0接入高电平,boot1接入低电平.然后重置一下
烧录完boot0接入低电平重置一下就工作了
编程的注意事项
- 每个.h头文件都应加上台下代码防止重复加载头文件声明(如文件名为LED.h文件)
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
表示优先目录工程内找,#include <stm32f10x.h>
在系统目录找
-过程函数
void 函数名(结构体 )
关于stm容量的定义在参考手册1.2里面有说明或零死角的10章
startup_stm32f10x_md.s
启动文件--用于设置堆栈、PC指针、初始化中断向量、系统时钟、引入到用C库函数_main函数system_stm32f10x.c
时钟配置文件--把外部时钟HSE=8M,经过PLL倍频为72Mstm32f10x.h
外设寄存映射文件--实现内核之外(被动单元)的外设的寄存器映射core_cm3.h
内核寄存映射文件,--实现内核(驱动单元)内的外设的寄存器映射core_cm3.c
内核函数stm32f10x_xxx.c
外设的驱动函数文件--主要用于外设的初始化函数等,I2C等stm32f10x_xxx.h
外设的初始化结构体与参数列表,外设驱动函数的声明stm32f10x_conf.h
主要为了方便声明stm32f10x_it.c``stm32f10x_it.h
存放中断服务函数(中断不一定要放在这文件内)
第一个项目工程模板
- 项目文件准备操作
- 新建文件夹
Listings
Output
Project``User
文件夹 - 然后在
Listings
分别建立-固体库FWlib
-微控制器CMSIS
文件夹
FWlib目录下存放inc与src文件夹(从官方sdk复制文件分别是6和7) ,CMSIS目录下存放文件(官方2,3,4和5) 并建立startup用于存放启动文件(官方1), - 在
User
目录下存放(官方8和9)
- 新建工程项目
打开软件,新建项目到Project目录下,在项目的目录下新建文件夹STARTUP,CMSIS,FWLIB,USER
双击项目STARTUP添加startup_stm32f10x_md.s
启动文件
双击项目CMSS添加core_cm3.c
与system_stm32f10x.c
双击项目FWLIB添加FWlib目录下的src文件夹下面的所有C文件(外设的驱动函数文件)
然后在USER文件夹右键add new Item to Group"user"
,然后添加main.c 注意保存位置为USER文件夹,输入代码
#include "stm32f10x.h"
int main(void)
{
}
然后保存
然后点魔术棒-在C++的IncludePaths中添加工程项目中包含有.h的目录(软件不会检索子目录的)
因为要用到stm32f10x_conf.h来配置(请查看stm32f10x.h的8296行),所以以项目上C++的Definel输入USE_STDPERIPH_DRIVER
,
别外因设备为STM32F10X_MD型的(查看stm32f10x.h的65行),要选择设备类型,所以在上面的C++的Definel后面加个,
号输入STM32F10X_MD
后面要用到串口print调试所以要在
Target
选项页>Use MicroLIB
-√
输入HEX和选择目录文件
Output
选项页>Create HEX File
-√>select Folder for objects
-选择文件夹-Output文件夹
Listing
选项页>select Folder for Listing
-选择汇编的文件清单>Listings文件夹
C/C++
选项页>Define-STM32F10X_HD, USE_STDPERIPH_DRIVER
>include paths>设置目录如下
....\Libraries\CMSIS
....\User
....\Libraries\FWlib\inc
....\User\led
debug
选项页>use
-CMSIS-DAP Debugger
Utilities
选项页>Use Debug Driver
-√
debug
选项页>Settings
>debug
选项页>Max Clock
-5MHz>Flash Download
选项页>选择Erase Seclors-另外三个全勾选
如需要HEX文件请勾选optput>create HEX File
最后在项目目录下新建keilkill.bat文件用于清理编译文件
del *.bak /s
del *.ddk /s
del *.edk /s
del *.lst /s
del *.lnp /s
del *.mpf /s
del *.mpj /s
del *.obj /s
del *.omf /s
::del *.opt /s ::不允许删除JLINK的设置
del *.plg /s
del *.rpt /s
del *.tmp /s
del *.__i /s
del *.crf /s
del *.o /s
del *.d /s
del *.axf /s
del *.tra /s
del *.dep /s
del JLinkLog.txt /s
del *.iex /s
del *.htm /s
::del *.sct /s
del *.map /s
exit
以上可以编译工程了
点亮LED
- 在USER下新建LED文件夹新建
板级支持包
-bsp_led.c
和bsp_led.h
- 在项目内添加bsp_led.c文件然后,在文件内添加
#include "bsp_led.h"
编译一下然后可以看到bsp_led.h,在这个文件内添加
#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "stm32f10x.h"
#endif /*__BSP_LED_H*/
- 最后在main.c里添加
#include "bsp_led.h"
编译一次测试
现在开始在bsp_led.c里面写代码
因为要点亮GPIO,所以打开FWLIB
外设的驱动函数文件stm32f10x_gpio.c,然后通过C文中的#include "stm32f10x_gpio.h"
代码上右键打开头文件,
-然后一般先找到_Init
初始化结声名函数GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
,先复制到bsp_led.c内,
然后在这声名函数右键GOTO,显示其.C源文件的说明,得到其
参数1可以为GPIOx、所以这个应该选择GPIOB。所以在bsp_led.c中更改GPIO_TypeDef* GPIOx
为GPIOB
参数2为GPIO_InitTypeDef为结构体指针,然后在其文件的96行找到GPIO_InitTypeDef的初始化结构定义,所以在bsp_led.c前面先定义一下初始化结构定义
然后在设置GPIO_InitStartup的各个设定:代码如下
GPIO_InitTypeDef GPIO_InitStartup;
GPIO_InitStartup.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStartup.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStartup.GPIO_Speed = GPIO_Speed_50MHz;
为了方便移植与修改,应该在bsp_led.h文件里先声明引脚,以后改那个值就好了
#define LED_TEST_GPIO_PIN GPIO_Pin_12 //定义板子测试灯的引脚为12脚(值在stm32f10x_gpio.h的130行)
#define LED_TEST_GPIO_PORT GPIOB //定义板子测试灯的IO组为GPIOB组(同上)
#define LED_TEST_GPIO_CLK RCC_APB2Periph_GPIOB //定义板子测试灯GPIOB的RCC时钟定义
把GPIO_Pin_12
定义为LED_TEST_GPIO_PIN,然后在bsp_led.c里面也更改为GPIO_Pin_12,
同上修改GPIOB
定义为LED_TEST_GPIO_PORT,
最后使能RCC,操作方法大同小异.这里不再说明
模板地址:https://files.cnblogs.com/files/praybb/stm32f103c8t6%E6%A8%A1%E7%89%88.zip