keil下C语言实现流水灯
说在开头:这篇博客很多东西还没有认真弄好以至于草草提交,后期有精力了会尽力认真去搞的 2021.10.24
一. 初始化
【总线基地址】
【外设基地址】
二. c实现流水灯
【项目设置】
1. 添加设备
-
点击图示按钮 勾选图示设备
2. 修改参数
-
勾选Create HEX File
勾选后,运行main.c时,生成相关的.hex文件; hex文件用于烧录到开发板上;
-
改为相关的芯片
【代码】
main.c
#define RCC_AP2ENR *((unsigned volatile int*)0x40021018) //----------------GPIOA配置寄存器 ------------------------ #define GPIOA_CRH *((unsigned volatile int*)0x40010804) #define GPIOA_ORD *((unsigned volatile int*)0x4001080C) //----------------GPIOB配置寄存器 ------------------------ #define GPIOB_CRL *((unsigned volatile int*)0x40010C00) #define GPIOB_ORD *((unsigned volatile int*)0x40010C0C) //----------------GPIOC配置寄存器 ------------------------ #define GPIOC_CRH *((unsigned volatile int*)0x40011004) #define GPIOC_ORD *((unsigned volatile int*)0x4001100C) //-------------------简单的延时函数----------------------- void Delay_ms( volatile unsigned int t) { unsigned int i; while(t--) for (i=0;i<800;i++); } //------------------------主函数-------------------------- int main() { int j=100; RCC_AP2ENR|=1<<2; //APB2-GPIOA外设时钟使能 RCC_AP2ENR|=1<<3; //APB2-GPIOB外设时钟使能 RCC_AP2ENR|=1<<4; //APB2-GPIOC外设时钟使能 //这两行代码可以合为 RCC_APB2ENR|=1<<3|1<<4; GPIOA_CRH&=0xFFF0FFFF; //设置位 清零 GPIOA_CRH|=0x00020000; //PA12推挽输出 GPIOA_ORD|=1<<12; //设置初始灯为亮 GPIOB_CRL&=0xFFFFFF0F; //设置位 清零 GPIOB_CRL|=0x00000020; //PB1推挽输出 GPIOB_ORD|=1<<1; //设置初始灯为灭 GPIOC_CRH&=0xF0FFFFFF; //设置位 清零 GPIOC_CRH|=0x02000000; //PC14推挽输出 GPIOC_ORD|=1<<14; //设置初始灯为灭 while(j) { GPIOA_ORD=0x1<<12; //PA12高电平 Delay_ms(3000000); GPIOA_ORD=0x0<<12; //PA12低电平 Delay_ms(3000000); GPIOB_ORD=0x1<<1; //PB1高电平 Delay_ms(3000000); GPIOB_ORD=0x0<<1; //PB1低电平 Delay_ms(3000000); GPIOC_ORD=0x1<<14; //PC14高电平 Delay_ms(3000000); GPIOC_ORD=0x0<<14; //PC14低电平 Delay_ms(3000000); } }
【利用mcuisp烧录程序】
问题1:步骤三,读取器件信息时,经常读取失败 问题2:有时候存在个别灯不亮 都可能时因为芯片没有插好,再使劲把它往面包板里插一下