点燃第一个单片机
00 - STM32 - 点燃第一个单片机
STM32F103C8T6
片上资源/外设
命名规则
系统结构
引脚定义
启动配置
最小系统电路
软件安装
安装Keil5 MDK
安装器件支持包
- Keil.STM32F1xx_DFP.2.2.0.pack
软件注册
keygen_new2032
安装STLINK驱动
路径
- Keil_v5ARMSTLinkUSBDriver
- dpinst_amd64.exe
安装USB转串口驱动
路径
- 工具软件USB转串口CH340驱动CH341SER.EXE
端口(CH340)
Hello World
STM32库函数
新建项目
添加一点工程的必要文件
路径(固件库)
- STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm
其他
添加一个内核寄存器的描述文件
启动文件 - 放在项目文件内,并新建文件夹Start
配置KEIL5
新建项目
代码Hello World
#include "stm32f10x.h"
int main(void){
while(1){
}
}
通过配置寄存器来完成点灯的操作(准备工作)
STLink连接STM32
- 连接好后红灯常亮,蓝灯闪烁
配置调试器
如果DOWNLOAD失败,请更新STLINK驱动或检查插线是否有误
测试(红灯常亮)
配置寄存器的方式进行点灯的操作(完善代码)
完善代码
#include "stm32f10x.h"
int main(void)
{
RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00000000; //0x00002000则是红灯亮
while(1)
{
}
}
测试(红绿灯常亮)
总结:新建工程步骤
通过库函数操作
库函数的源文件
路径
- STM32STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driversrc
库函数的头文件
路径
- STM32STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driverinc
在项目内新建Library文件夹并复制库函数的源文件和头文件
其他文件(配置库函数头文件的包含关、存放中断函数)
路径
- STM32STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template
三文件复制到项目User目录下
宏定义
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
Define:USE_STDPERIPH_DRIVER
Include Paths
用库函数来实现点灯的操作
配置GPIOC的外设时钟
// 库函数操作
//配置GPIOC的外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
配置端口模式
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //GPIO引脚,赋值为第13号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,赋值为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数
//函数内部会自动根据结构体的参数配置相应寄存器
//实现GPIOC的初始化
/*设置GPIO引脚的高低电平*/
/*若不设置GPIO引脚的电平,则在GPIO初始化为推挽输出后,指定引脚默认输出低电平*/
// GPIO_SetBits(GPIOC, GPIO_Pin_13); //将PC13引脚设置为高电平
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //将PC13引脚设置为低电平
完整代码
#include "stm32f10x.h"
int main(void)
{
// 寄存器操作
//RCC->APB2ENR = 0x00000010;
//GPIOC->CRH = 0x00300000;
//GPIOC->ODR = 0x00000000;
// 库函数操作
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
//配置GPIOC的外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//使用各个外设前必须开启时钟,否则对外设的操作无效
/*GPIO初始化*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //GPIO引脚,赋值为第13号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,赋值为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数
//函数内部会自动根据结构体的参数配置相应寄存器
//实现GPIOC的初始化
/*设置GPIO引脚的高低电平*/
/*若不设置GPIO引脚的电平,则在GPIO初始化为推挽输出后,指定引脚默认输出低电平*/
GPIO_SetBits(GPIOC, GPIO_Pin_13); //将PC13引脚设置为高电平
//GPIO_ResetBits(GPIOC, GPIO_Pin_13); //将PC13引脚设置为低电平
while(1)
{
}
}
Comments | NOTHING