文章目录
前言:使用Keil编写LED流水灯,在STM32F103C8T6中运行,实现LED流水灯
一、面包板接线,将LED灯组连接到C8T6接口上。
1. 将ST-LINK与芯片接口相连接,作为芯片电源以及能够烧入程序。
具体内容,恕不详述,个人推荐可在视频网站上找详细视频,操作起来更加便捷。
2. 将LED灯分别与芯片接口连接。
本人使用的是A0、A1、A2接口,连接上红黄绿三色LED灯,组合为LED流水灯。
到此,实验需要的连接工作完成。
二、编写LED流水灯程序。
1. 新建LED流水灯工程
选择STM32F103C8T6芯片
我用的是ST-LINK烧录程序,若是使用TTL烧录则还需要打开output中的输出HEX文件选项,并且下载烧录软件才能进行烧录
2. 新建main.c文件,并编写程序
(1)新建main.c文件
(2)编写程序
//--------------APB2使能时钟寄存器------------------------
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
//----------------GPIOA配置寄存器 ------------------------
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
#define GPIOA_ODR *((unsigned volatile int*)0x4001080C)
//函数声明
void Delay_ms(volatile unsigned int);
void A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);
//时延函数
void Delay_ms( volatile unsigned int t)
{
unsigned int i;
while(t--)
for (i=0;i<10000;i++);
}
//控制灯亮灭
void A_LED_LIGHT()
{
GPIOA_ODR=0x0<<0; //PA5低电平
GPIOA_ODR=0x1<<1; //PB9高电平
GPIOA_ODR=0x1<<2; //PC14高电平
}
void B_LED_LIGHT()
{
GPIOA_ODR=0x1<<0; //PA5高电平
GPIOA_ODR=0x0<<1; //PB9低电平
GPIOA_ODR=0x1<<2; //PC14高电平
}
void C_LED_LIGHT()
{
GPIOA_ODR=0x1<<0; //PA5高电平
GPIOA_ODR=0x1<<1; //PB9高电平
GPIOA_ODR=0x0<<2; //PC14低电平
}
//------------------------主函数--------------------------
int main(){
RCC_APB2ENR|=1<<2; //APB2-GPIOA外设时钟使能
RCC_APB2ENR|=1<<3; //APB2-GPIOB外设时钟使能
RCC_APB2ENR|=1<<4; //APB2-GPIOC外设时钟使能
//也可以写成 RCC_APB2ENR|=1<<3|1<<4;
GPIOA_CRL&=0xFFF0FFFF; //设置位清零
GPIOA_CRL|=0X00200000; //PA5推挽输出,把第23、22、21、20位变为0010
GPIOB_CRH&=0xFF0FFFFF; //设置位清零
GPIOB_CRH|=0x00000020; //PB9推挽输出,把第7、6、5、4变为0010
GPIOC_CRH&=0xFF0FFFFF; //设置位清零
GPIOC_CRH|=0x02000000; //PC14推挽输出,把第27、26、25、24变为0010
GPIOA_ODR |= (1<<0);
GPIOA_ODR |= (1<<1); //设置灯的初始状态为灭
GPIOA_ODR |= (1<<2);
while(1)
{
A_LED_LIGHT();
Delay_ms(60);
B_LED_LIGHT();
Delay_ms(60);
C_LED_LIGHT();
Delay_ms(60);
}
}
(3)保存文件
保存为main.c文件
(4)在工程文件中添加main.c文件
(5)编译运行
LED流水灯