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章

  1. startup_stm32f10x_md.s启动文件--用于设置堆栈、PC指针、初始化中断向量、系统时钟、引入到用C库函数_main函数
  2. system_stm32f10x.c时钟配置文件--把外部时钟HSE=8M,经过PLL倍频为72M
  3. stm32f10x.h外设寄存映射文件--实现内核之外(被动单元)的外设的寄存器映射
  4. core_cm3.h内核寄存映射文件,--实现内核(驱动单元)内的外设的寄存器映射
  5. core_cm3.c内核函数
  6. stm32f10x_xxx.c外设的驱动函数文件--主要用于外设的初始化函数等,I2C等
  7. stm32f10x_xxx.h外设的初始化结构体与参数列表,外设驱动函数的声明
  8. stm32f10x_conf.h主要为了方便声明
  9. stm32f10x_it.c``stm32f10x_it.h存放中断服务函数(中断不一定要放在这文件内)

第一个项目工程模板

  • 项目文件准备操作
  1. 新建文件夹Listings Output Project``User文件夹
  2. 然后在Listings分别建立-固体库FWlib -微控制器CMSIS文件夹
    FWlib目录下存放inc与src文件夹(从官方sdk复制文件分别是6和7) ,CMSIS目录下存放文件(官方2,3,4和5) 并建立startup用于存放启动文件(官方1),
  3. User目录下存放(官方8和9)
  • 新建工程项目
    打开软件,新建项目到Project目录下,在项目的目录下新建文件夹STARTUP,CMSIS,FWLIB,USER
    双击项目STARTUP添加startup_stm32f10x_md.s启动文件
    双击项目CMSS添加core_cm3.csystem_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.cbsp_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* GPIOxGPIOB
参数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

posted @ 2020-01-17 17:02  天祈笨笨  阅读(374)  评论(0编辑  收藏  举报