基于STM32F103芯片实现LED灯闪烁


前言

stm32f103c8t6最小核心学习板包含了以下成分:

1.四方扁平封装的主要MCU – STM32F103C8T6。

2.重置开关–重置微控制器。

3.microUSB端口–用于串行通信和电源。

4.BOOT选择器跳线– BOOT0和BOOT1跳线,用于选择引导存储器。

5.两个LED –用户LED和电源LED。

6.8 MHz晶振– MCU的主时钟。

7.32.768KHz振荡器– RTC时钟。

8.SWD接口–用于使用ST-Link进行编程和调试。

9.3.3V稳压器(在底部)–将5V转换为3.3V,以为MCU供电。


提示:以下是本篇文章正文内容,下面案例可供参考

一,寄存器配置

1,时钟控制

时钟控制名字叫做RCC,属于AHB总线。

在这里插入图片描述
我们可以在6.3.7小节找到APB2外设时钟使能寄存器(RCC_APB2ENR),偏移地址是0x18,所以APB2的地址就是0x4002 1018。
在这里插入图片描述
首先对RCC寄存器定义

#define RCC_APB2ENR (*(unsigned int *)0x40021018)

根据上图可知,想要使GPIOX端口时钟使能,就可以把RCC_APB2ENR的位X赋值为1,就可以开启该端口的时钟。

	RCC_APB2ENR |= (1<<3); //GPIOB端口时钟使能
	RCC_APB2ENR |= (1<<4); //GPIOC端口时钟使能	
	RCC_APB2ENR |= (1<<2); //GPIOA端口时钟使能

2,GPIO端口设置:

总所周知,stm32每一组GPIO端口都配置有7种寄存器

1.端口配置低寄存器GPIOx_CRL
2.端口配置高寄存器(GPIOx_CRH)
3.端口输入数据寄存器(GPIOx_IDR)
4.端口输出数据寄存器(GPIOx_ODR)
5.端口位设置/ 清除寄存器(GPIOx_BSRR)
6.端口位清除寄存器(GPIOx_BRR)
7.端口配置锁定寄存器(GPIOx_LCKR)

STM32中,用端口配置低寄存器(GPIOx_CRL)来配置引脚Px0-Px7, 用端口配置高寄存(GPIOx_CRH)来配置引脚Px8-Px15。

我在实验中使用了A0,B9,C14三个串行口,定义的寄存器分别是

偏移地址是0x04,意思是在基地址的基础上再加0x04,所以,对于GPIOB来说就是0x4001 0c04。如果配置PB0-PB7,那么需要的寄存器是低位的寄存器GPIOB_CRL,它的地址是0x4001 0c00。
  在这里插入图片描述

#define GPIOA_CRL	*((unsigned volatile int*)0x40010800)
#define	GPIOA_ORD	*((unsigned volatile int*)0x4001080C)

#define GPIOB_CRH	*((unsigned volatile int*)0x40010C04)
#define	GPIOB_ORD	*((unsigned volatile int*)0x40010C0C)

#define GPIOC_CRH	*((unsigned volatile int*)0x40011004)
#define	GPIOC_ORD	*((unsigned volatile int*)0x4001100C)

其中GPIO_ORD寄存器的第一位设置为0则代表串行口输出低电平,ODR的第2位设置为1则代表P2口输出高电平。
已知点亮LED灯需要输出低电平,

		GPIOA_ORD=0x0<<0;		//PA0亮
		Delay_ms(5000000);      //设置时延
		GPIOA_ORD=0x1<<0;		//PA0灭
		Delay_ms(5000000);
		
		GPIOB_ORD=0x0<<9;		//PB9亮
		Delay_ms(5000000); 
		GPIOB_ORD=0x1<<9;		//PB9灭
		Delay_ms(5000000); 
		
		GPIOC_ORD=0x0<<15;		//PC15亮
		Delay_ms(5000000);   
		GPIOC_ORD=0x1<<15;		//PC15灭
		Delay_ms(5000000); 

其中Delay_ms()是设置的时延函数,具体多少时间没有计算,跟着感觉来的。

再就是输出的选择
在这里插入图片描述

我们在这里使用的是推免输出。

二、实际操作

1.具体代码

#define GPIOB_BASE 0x40010C00BSRR:
//端口位设置/ 清除寄存器(GPIOx_BSRR),该寄存器其实是间接控制ODR寄存器
#define
  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值