历史上的今天
今天是:2024年09月06日(星期五)
2019年09月06日 | stm32实现LED灯亮灭
2019-09-06 来源:eefocus
一、概述
本章中,不特殊说明都以stm32F103VET6为例,软件平台为iar6.4
通过查看原理图,我们的LED指示灯配置在PB8、PB9管脚上,通过配置GPIOB时钟及引脚来控制指示灯的亮灭。

二、本章学习目标
学会查看原理图
理解stm32端口配置
学会操作使用iar编程工具
三、GPIO端口配置
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》文档;
2、led目录结构说明

三、文件内容说明
1、startup_stm32f10x_hd.s(启动文件)
文件描述:
该文件作为启动时执行的第一步,这个文件中有一段启动代码。
代码工作流程:
(1) 初始化SP;
(2) 初始化PC指针 --- 指向iar_program_start
(3) 设置中断向量表各exception的地址
(4) 全局变量清零
(5) 转向C语言的main函数
system_stm32f10x.c(系统配置)
文件描述:
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 ledrn");
while(1)
{
SET_LED_1;
delay_ms(1000); //1000毫秒 1秒
CLR_LED_1;
delay_ms(1000);
}
}
史海拾趣
|
俺想学习FPGA--有偿寻求合作开发FPGA学习板 看到现在FPGA现在这么火爆,忍不住想学习一下。 但是本人对FPGA了解甚少。想寻求高手共同合作搞一个FPGA开发板。 我负责:元件费用,打样费用。以及适当给与合作者一定酬劳(这个不多,呵呵,俺也是 ...… 查看全部问答> |
|
作者: Ian Poole Adrio Communications Ltd 第一部分解释了调幅(AM)和调频(FM)的基础,并阐述了优点和缺点。第二部分解析了频移键控(PSK)和正交幅度调制(QAM)。第三部分讨论扩频通信技术,包括被广泛应用的直接序列扩频通信(DSSS),和 ...… 查看全部问答> |
|
我的wince上咋就不能运行dotnet的程序呢,点击应用程序一点反应也没有,也不报错。另外,保证dotnet的支持包已经打入wince,1.1和2.0都打了。 把SYSGEN_DOTNET和SYSGEN_DOTNET_SUPPORT还有DOTNETV2的所有选项加上,则运行dotnet的程序既不报错 ...… 查看全部问答> |
|
我看很多资料都写得是AD7705的参考电平时2.5v,但是今天看到有人用ref195的输出做AD7705的参考电平,ref195接ref+输出5v,ref-接地请问这样合适吗。 还有AD7705的资料上写着采样范围是0-20mv或0-2.5v,一直不太明白这是什么意思,0-2.5v不是包括0- ...… 查看全部问答> |
|
An unspecified Debug Toolbox call failed 我在使用ADS1.2套件的AXD时,连接了Easyjtag,并进行了设置,但是却出现了如题的An unspecified Debug Toolbox call failed的错误,请高人指点,该如何解决这个问题?… 查看全部问答> |
|
keil编译ARM报--- Error: can't execute 'BIN30\ArmAsm'怎么解决 我安装的keil 3.3版本,以前用来编译C51,现在添加上ARM,操作系统是U COS II,编译时报--- Error: can\'t execute \'BIN30\\ArmAsm\',我把C:\\Keil\\ARM\\BIN30中的ARMASM.EXE拷贝到BIN中无法解决此问题,请教高手要怎么处理… 查看全部问答> |
|
斑竹: 我用vc33-120做了一块卡,外部晶阵是12m,5倍频,定时中断置数30000,理论计算 我的定时中断应该是1000hz,但是发现是100hz,我晶阵换过,都没有用.请教斑竹 最可能是什么原因啊 急!文字… 查看全部问答> |
|
TI OMAP 5平台不仅全面提升了性能,还采用了能够带来新机遇和用户体验的新特性,从而使应用处理器能够满足更广泛的要求。简而言之,OMAP 5平台将以其全新的性能及功能水平推动移动设备的变革,让我们共同开启“变革”新时代!$(\'swf_eBM\').innerH ...… 查看全部问答> |
|
#include #define uchar unsigned char #define uint unsigned int sbit uln=P2^0;//uln2803 sbit DQ=P2^1;//ds18b20与单片机连接口 sbit ming=P2^2;// sbit hong1=P2^3; sbit hong2=P2^4; sbit RS=P2^5; sbit RW=P2^6; sbit EN=P2^7; u ...… 查看全部问答> |




