keil下C语言实现流水灯

说在开头:这篇博客很多东西还没有认真弄好以至于草草提交,后期有精力了会尽力认真去搞的 2021.10.24

一. 初始化

【总线基地址】

总线名称 总线基地址 相对外设基地址的偏移 APB1 0x4000 0000 0x0 APB2 0x4001 0000 0X0001 0000 APB3 0x4001 8000 0x0001 8000

【外设基地址】

外设名称 外设基地址 相对 APB2 总线的地址偏移 GPIOA 0x4001 0800 0x0000 0800 GPIOB 0x4001 0C00 0x0000 0C00 GPIOC 0x4001 1000 0x0000 1000 GPIOD 0x4001 1400 0x0000 1400 GPIOE 0x4001 1800 0x0000 1800 GPIOF 0x4001 1C00 0x0000 1C00 GPIOG 0x4001 2000 0x0000 2000

二. 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:有时候存在个别灯不亮 都可能时因为芯片没有插好,再使劲把它往面包板里插一下

【实验结果】

经验分享 程序员 微信小程序 职场和发展