个人学习笔记
文件路径:程序源码\STM32Project-DAP&DAPmini\1-1 接线图
3-1LED闪烁图片
新建项目
新建项目文件
选择F103C8芯片
关闭弹出窗口
拷贝资料
在项目内新建3个文件夹
Start、Library、User
Start文件拷贝
从资料中拷贝文件
文件路径:固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
全部复制到“Start”文件内
再复制stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h三个文件到“Start”文件夹下
文件路径:固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
复制core_cm3.c、core_cm3.h到“Start”文件夹下
文件路径:固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
Library文件拷贝
全部复制到Library文件夹内
文件路径:固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
全部复制到Library文件夹内
文件路径:固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc
Library文件复制完毕
User文件拷贝
复制main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三个文件到“User”文件夹内
文件路径:固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
项目配置
把默认组叉掉,新建3个组:Start、Library、User
选中Start,添加.c、.h结尾的文件、startup_stm32f10x_md.s文件
把Library文件夹内的文件全部添加到组里
把User文件夹内的文件全部添加到User组里
添加文件夹到文件路径,在Define输入:USE_STDPERIPH_DRIVER
Debug——Use选择:
根据接口选择ST-Link Debuger或者CMSIS-DAP Debuger
点击Settings——Flash Download——勾选Reset and Run
编写代码测试
点main.c文件,清空里面内容,添加头文件
添加主函数main
#include "stm32f10x.h" // Device headerint main(void)
{while(1){}
}
编译测试
出现多个禁告
查到报错原因是版本号应选择5
修改后运行正常
点击下载测试也没有报错
批处理工具
keilkill.bat:复制到项目文件中
作用:把工程编译产生的中间文件删除
文件路径:程序源码\STM32Project-DAP&DAPmini\1-2 keilkill批处理
此时项目工程有20多MB,其中占用空的是Listings、Objects两个文件夹,其中都是工程的中间文件
双击“keilkill.bat”文件,会将中间文件删除,Listings、Objects两个文件夹被清空,此时项目只有2MB
点亮LED
操作STM32的GPIO有3个步骤,涉及RCC和GPIO两个外设
1、使用RCC开启GPIO时钟
2、使用GPIO_Init函数初始化GPIO
3、使用输出或者输入的函数控制GPIO口
在Library文件中:stm32f10x_rcc.c、stm32f10x_gpio.c
开启时钟
复制RCC中的RCC_APB2Periph_GPIOA到main函数中
取RCC.h中的时钟控制函数:RCC_APB2PeriphClockCmd到main函数中,右键跳转到定义
报错是因为删除了中间文件,重新点击build,即可正常跳转
因为点亮PA0口LED,
第一个参数:选择RCC.c文件中间的“RCC_APB2Periph_GPIOA”
第二个参数:ENABLE
时钟开启:
#include "stm32f10x.h" // Device headerint main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);while(1){}
}
取gpio.h中的GPIO_Init函数复制到main函数中,右键跳转定义
第一个参数:GPIOx(x改为A)
第二个参数:是一个结构,GPIO_InitTypeDef
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = ;
GPIO_InitStruct.GPIO_Pin = ;
GPIO_InitStruct.GPIO_Speed = ;
先生成空结构体,再右键跳转查看函数说明,复制参数
选择“GPIOMode_TypeDef”,ctrl + F搜索
看到GPIO的8种工作模式
typedef enum
{ GPIO_Mode_AIN = 0x0, // 模拟输入GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入GPIO_Mode_IPD = 0x28, // 下拉输入GPIO_Mode_IPU = 0x48, //上拉输入GPIO_Mode_Out_OD = 0x14, // 开漏输出GPIO_Mode_Out_PP = 0x10, // 推挽输出GPIO_Mode_AF_OD = 0x1C, // 复用开漏GPIO_Mode_AF_PP = 0x18 // 复用推挽
}GPIOMode_TypeDef;
无完待续
参考资料:
[3-2] LED闪烁&LED流水灯&蜂鸣器_哔哩哔哩_bilibili