基于STM32F103C8T6实现流水灯的操作实验

本文介绍如何使用STM32F103芯片实现流水灯效果,包括GPIO端口初始化、C语言和汇编语言编程实现,并提供详细的代码示例及烧录步骤。

一、GPIO端口的初始化

1.配置时钟

1.找到时钟使能寄存器映射基地址即复位时钟控制在这里插入图片描述
由于本次实验采用GPIOA、B、C三个端口,该三个端口又都属于APB2总线。
2.找到APB2总线端口偏移地址以及IOPA、IOPB、IOPC端口所在位置
在这里插入图片描述
3.使能对应端口时钟

//----------------APB2使能时钟寄存器 -------------------
#define RCC_APB2ENR		*((unsigned volatile int*)0x40021018)

	RCC_APB2ENR|=1<<2|1<<3|1<<4;//APB2-GPIOA、GPIOB、GPIOC外设时钟使能	

2.不同模式和速率设置

本次实验分别用到A4、B5、C14三个引脚,最高输出时钟频率2Mhz。
1.查找端口配置低寄存器A4、B5属于端口配置低寄存器偏移地址为0x00,C13属于端口配置高寄存器偏移地址为0x04。
在这里插入图片描述
2.找到GPIOx端口基地址
在这里插入图片描述
3.配置对应引脚寄存器,基地址+偏移量

//----------------GPIOA配置寄存器 -----------------------
#define GPIOA_CRL		*((unsigned volatile int*)0x40010800)
//----------------GPIOB配置寄存器 -----------------------
#define GPIOB_CRL		*((unsigned volatile int*)0x40010C00)
//----------------GPIOC配置寄存器 -----------------------
#define GPIOC_CRH		*((unsigned volatile int*)0x40011004)

4.设置输出模式,输出速度2MHZ

	GPIOA_CRL&=0xFFF0FFFF;		//设置位 清零	
	GPIOA_CRL|=0x00020000;		//PA4推挽输出,把第19、18、17、16位变为0010
	GPIOB_CRL&=0xFF0FFFFF;		//设置位 清零	
	GPIOB_CRL|=0x00200000;		//PB5推挽输出,把第23、22、21、20变为0010
	 GPIOC_CRH&=0xFF0FFFFF;		//设置位 清零	
	GPIOC_CRH|=0x00200000;		//PC14推挽输出,把第23、22、21、20变为0010

二、原理

1.流水灯操作的引脚

位于GPIO端口:AHB总线包含RCC时钟控制,GPIO是属于APB2的。

2.流水灯原理

本次实验采用三个灯实现,亮灯状态用1表示,灭灯状态用0表示。

初始状态0 0 0,
状态一为1 0 0
状态二为0 1 0
状态三为0 0 1
状态三结束后继续进入状态一,一直循环达到流水灯效果。

3.C语言代码实现流水灯

#include "stm32f10x.h"
//----------------APB2使能时钟寄存器 ---------------------
#define RCC_APB2ENR		*((unsigned volatile int*)0x40021018)
//----------------GPIOA配置寄存器 -----------------------
#define GPIOA_CRL		*((unsigned volatile int*)0x40010800)
#define	GPIOA_ODR		*((unsigned volatile int*)0x4001080C)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值