您的位置:首页 > 其它

STM32点亮LED(熟中新认识)

2017-12-27 02:45 302 查看
STM32点亮LED步骤案例http://blog.csdn.net/ktigerhero3/article/details/53942876

准备 

(1)硬件 

STM32开发板,jlink仿真器(用于烧入程序) 

(2)软件 

a)集成开发环境keil,我用的是keil4 

b)jlink驱动Setup_JLink_V490.exe(驱动jlink仿真器) 

准备妥当,GO GO GO

点亮LED灯的步骤如下 

1.安装keil软件 

2.新建工程 

3.配置参数 

4.安装jlink驱动和连线烧入程序 

5.启动STM32,点亮LED


1.新建工程

STM32新建工程比较麻烦,原因是因为需要自己手动包含库函数,设置环境等。 

(1)在project选项下新建一个uvision project 

选择芯片型号,芯片型号开发板的CPU上有,我的为STM32F103RCT6 

(2)新建3个文件夹,分别放不同的库函数 

a)core文件夹,主要放CMSIS文件 

b)lib文件夹,主要放设备文件 

c)user文件夹,放main函数 

这些文件对应相应的芯片,可在官方下载。 

STM32F10x_StdPeriph_Lib_V3.5.0.rar中有。 

(a)core文件夹文件列表如下
//5个
core_cm3.c
core_cm3.h
system_stm32f10x.c
system_stm32f10x.h
stm32f10x.h
1
2
3
4
5
6

(b)lib文件夹列表
//两个文件夹
inc
src
1
2
3

(c)user文件夹为main.c


2.配置参数

1)output 选项下勾create HEX file 

2)包含头文件:在options for taget 中的C/C++选项中include path包含core和lib/inc(有头文件的目录都包含进去), 

3)Define下加入宏STM32F10X_HD,USE_STDPERIPH_DRIVER 

目的:“使用标准外设驱动”,在C/C++预定义中加入“USE_STDPERIPH_DRIVER”和STM32F10X_HD就是允许“使用标准外设驱动”了。 

此时可以编译了,注意,如果编译出现undefined symbol错误,原因是lib中头文件的版本和keil默认include版本冲突,一个解决方案是直接将lib中头文件拷贝到默认的D:\Program Files\keil\ARM\INC\ST\STM32F10x目录中。


3.安装jlink驱动

(1)下载Setup_JLink_V490.exe,安装后重启系统 

(2)在Debug和Utinities中选择J-LINK。在setting中的FLASH 

download中add芯片类型 

(3)连好线点load烧录程序。


4.自己编写点亮LED程序

以上新建工程中包含库函数是为了初始化单片机,最终使单片机运行到main函数中。当程序运行到main函数中后,就要在main函数中控制点亮LED灯了。点亮LED灯关键要找到对应关系。 

(1)首先要找到开发板上的LED灯。 


 

(2)然后要找到开发板对应的电路图,在电路图上找到你所要控制的LED灯的编号(注意,电路图上的编号对应程序中定义的宏的名称)。 




 

(3) 最后在程序中给LED灯对应的地址赋值(高电平还是低电平)。赋值的方法有三种,可以通过调用库来赋值,也可以给寄存器直接赋值。示例代码如下:
#include "stm32f10x.h"

#define SHOW_LED (*((volatile unsigned int *)0x40010800))
int main()
{
//1.声明一个GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
//2.IO端口复用都需要初始化一个时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //使能PB,PE端口时钟
//3.给结构体赋值
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                //LED0-->PB.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHz
//4.初始化GPIOA
GPIO_Init(GPIOA, &GPIO_InitStructure);                   //根据设定参数初始化GPIOB.8
//5.根据电路图设置此端口是高电平还是低电平,如果有电流通过,LED灯就亮了
//法1.调用库函数来实现IO控制,设置为低电平,有电流通过
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
//法2.直接控制寄存器来实现IO控制
//GPIOA->BRR=GPIO_Pin_8;
//法3.找到寄存器地址,直接赋值
//SHOW_LED&= ((unsigned int)0x0100);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: