STM32点亮一个LED
一、环境
OS:Win7 64位
Keil:keil5
MCU: STM32F103C8T6
下载方式:Elink
二、准备工作
(一)GPIO外设的功能分析
图:I/O端口位的基本结构

STM32F103C8T6共有2组GPIO端口:PA、PB,每组16个端口。每个端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
GPIO端口的每个位可以由软件分别配置成多种工作模式:
—输入浮空
—输入上拉
—输入下拉
—模拟输入
—开漏输出
—推挽式输出
—推挽式复用功能(本次实验使用该功能)
—开漏复用功能
(二)USER_LED与STM32硬件连接关系

(三)调用标准库初始化GPIO外设
1、使能GPIO的时钟

从上面的系统结构图可见,GPIOB位于APB2系统总线上,因此,GPIO的时钟使能使用如下函数:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
2、配置GPIOB端口到第8个IO口
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
3、配置PB8为推挽输出模式(配置GPIO_MODER)
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出模式
5、配置PB8的输出速度为50MHz
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
6、初始化GPIO(初始化相应的寄存器)
GPIO_Init(GPIOB,&GPIO_InitStruct);
(四)调用标准库点亮一个LED
经过上面的分析,调用stm32标准库驱动LED。
三、程序开发
main.c文件如下:
#include "stm32f10x.h"
void delay(int cnt);
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_8);
delay(1000);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
delay(1000);
}
}
void delay(int cnt)
{
int i,j;
for(i=0;i<cnt;i++)
{
for(j=0;j<0xfff;j++)
{}
}
}
笔者:2019年8月17日,云南昆明。
这篇博客详细介绍了如何在STM32F103C8T6微控制器上使用Keil5和标准库来初始化GPIO并点亮一个LED。内容包括GPIO外设的功能分析,USER_LED与STM32的硬件连接,以及具体的初始化和编程步骤。
1068

被折叠的 条评论
为什么被折叠?



