STM32点亮LED(熟中新认识)

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;   

}        

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值