stm32流水灯

目录

一、地址映射和寄存器映射

1.总线基地址 

2.外设基地址 

3.寄存器地址 

二、GPIO端口初始化

1.找到外设时钟的位置。此处用到GPIOB (时钟配置)

 2.下面选择如图所示(输入输出模式设置  、最大速率设置)

三、串口USB TO TTL 与stm32F103核心板连接如下图所示

四、启动方式说明:

五、程序下载

六、用C语言实现流水灯的闪烁

1.代码

2.准备工作 

3.生成HEX文件 

4.实验结果

七、实验心得

八、参考链接


一、地址映射和寄存器映射

1.总线基地址 

 

2.外设基地址 

3.寄存器地址 

此处说明:相对地址偏移 ,就是说相当于原来的地址是一个范围,加上地址偏移(加上偏移值)就是准确位置。 

 

 

二、GPIO端口初始化

1.找到外设时钟的位置。此处用到GPIOB (时钟配置)

 2.下面选择如图所示(输入输出模式设置  、最大速率设置)

  

此处说明:x的意思是无论是ABCDE都行。CRL代表低八位,CRH代表高八位。

 

 

三、串口USB TO TTL 与stm32F103核心板连接如下图所示

对应的接口:

PA9–RXD
PA10–TXD
3.3V–3V3
SND–GND 

 

 

四、启动方式说明:

 BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。

 BOOT1=0 BOOT0=1(ISP方式)从系统存储器启动,这种模式启动的程序功能由厂家设置。BOOT1=1 BOOT0=1从内置SRAM启动,这种模式可以用于调试。

如图所示

 

 

五、程序下载

连线截图 

 

 

六、用C语言实现流水灯的闪烁

1.代码

#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);
	}
}

2.准备工作 

3.生成HEX文件 

4.实验结果

 

七、实验心得

通过本次实验,对寄存器有了一定了解。实验过程中遇到很多问题,在查了很多资料和参考优秀的博客之后,学习到了很多,也解决了很多问题,在不懂之处,也有了明细的解释。有很多我值得学习的地方。我深知,在今后的学习道路上,任重而道远。 

 

 

八、参考链接

基于汇编和C语言STM32流水灯依次闪烁_Laul Ken-Yi的博客-CSDN博客

STM32寄存器的简介、地址查找,与直接操作寄存器_geekYatao-CSDN博客_stm32寄存器

STM32从地址到寄存器_geekYatao-CSDN博客_stm32寄存器地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值