wangxl@20180808
本章中,不特殊说明都以stm32F103VET6为例,软件平台为iar6.4
通过查看原理图,我们的LED指示灯配置在PB8、PB9管脚上,通过配置GPIOB时钟及引脚来控制指示灯的亮灭。
1.配置开启GPIO时钟
STM32上电时外设时钟默认不开启,用要时需要先开启时钟,本例开启GPIOA和GPIOB的时钟。
参考代码:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
2.设置GPIO输出模式
stm32F1提供了4种输出模式(推挽输出、开漏输出 、复用推挽输出 、复用开漏输出)和3种输出速度;一般配置LED采用推挽输出;
/*PB8,out*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
3、控制LED灯
参考原理图,可以看出点亮LED灯需要IO口输出低电平;
LED亮(设低电平) GPIO_ResetBits(GPIOB, GPIO_Pin_8)
LED灭(设高电平) GPIO_SetBits(GPIOB, GPIO_Pin_8)
1、打开led工程
用iar编程工具找开led目录下的工程,可以参考《Iar工程编译和下载的使用教程.docx》文档;
目录/文件 |
说明 |
/led |
包含项目、工程文件、调试信息等(.eww .ewp) |
|-Debug |
包含调试目录 |
|-Debug/Exe |
包含配置生成的.hex或.bin文件 |
|-Debug/Obj |
包含.o编译文件 |
/Startup |
包含启动文件 startup_stm32f10x_hd.s启动文件
|
/user |
User层目录
|
|-app |
应用相关 |
|-app/main.c |
main主程序 |
|-com |
串口相关 |
|-com/USART.c |
配置串口调用程序 |
|-sys |
系统相关 |
|-sys/stm32f10x_it.c |
编写中断程序 |
|-sys/RCC |
设置系统时钟和总线时钟 |
|-sys/delay.c |
配置延时调用函数 |
|-sys/NVIC.c |
配置NVIC中断 |
../LibrariesM3 |
M3库目录
|
|-CMSIS |
CMSIS核心层 CMSIS\Core\CM3\stm32f10x.h寄存器地址和结构体类型的定义 |
|STM32F10x_StdPeriph_Driver |
Stm32f10x系列驱动文件包 |
|-stm32v3.1.0.a |
Stm32v3.1库文件 |
1、startup_stm32f10x_hd.s(启动文件)
文件描述:
该文件作为启动时执行的第一步,这个文件中有一段启动代码。
代码工作流程:
(1) 初始化SP;
(2) 初始化PC指针 --- 指向iar_program_start
(3) 设置中断向量表各exception的地址
(4) 全局变量清零
(5) 转向C语言的main函数
文件描述:
system_stm32f10x.c里的函数的功能是完成系统时钟的配置,通过RCC.c调用system_stm32f10x.c内部的SystemInit的函数,进行系统时钟的初始化;
3、NVIC.c(中断配置程序)
文件描述:
配置使能系统中断程序文件,本例中主要配置使能USART1串口接收中断;
3.1 NVIC_Configuration()
调用该函数主要设置中断允许及中断优先级;
函数原型:
void NVIC_Configuration(void);
参数:(无)
返回值:(无)
4、RCC.c(配置系统时钟程序)
文件描述:
配置使能系统时钟程序文件,本例中主要配置系统时钟频率设为72MHz;主要调用system_stm32f10x.c内部的SystemInit的函数,进行系统时钟的初始化;
4.1 RCC_Configuration()
调用该函数主要设置中断允许及中断优先级;
函数原型:
void RCC_Configurationvoid);
参数:(无)
返回值:(无)
5、bsp.c(板载驱动程序)
文件描述:
初始化所有的硬件设备;
5.1 bsp_Init()
调用该函数主要配置时钟,初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次;
函数原型:
void bsp_Init(void);
参数:(无)
返回值:(无)
6、main.c(主程序)
文件描述:
初始化全局变量,配置时钟,初始化所有的硬件设备,定时每秒切换运行led指示灯。
代码工作流程:
int main(void)
{
bsp_Init();//硬件初始化
USART1_Puts("demo led\r\n");
while(1)
{
SET_LED_1;
delay_ms(1000); //1000毫秒 1秒
CLR_LED_1;
delay_ms(1000);
}
}
https://download.csdn.net/download/flyme2010/10592332