单片机基础知识5——配置-寄存器(外藩)

简单粗暴,直击核心。


目录

一、寄存器编程

1.使能IO口时钟

2.初始化IO口

3.设置高低电平

二、完整代码

main.h

main.c

led.h

led.c

三、拓展

总结


一、寄存器编程

(以点亮LED为例)

<依据STM32中文参考手册>

1.使能IO口时钟

(以GPIOC为例)

	/* 使能IO口时钟,C组 */
	//设置-第四位; 
	RCC->APB2ENR |= 1 << ( 4 ); //不影响其它位; 

2.初始化IO口

(以PC13为推挽输出例)

	/* 配置IO口模式,PC13推挽高速 */
	//清除-20、21、22、23. 
	GPIOC->CRH &= 0xFF0FFFFF;//1111 1111 0000 1111 1111 1111 1111 1111 ; 
	//赋值。
	GPIOC->CRH |= 0x00300000;//0011 = 3; 

3.设置高低电平

(以PC13为例)

(PC13设置为高电平)

	/* 输出高电平,关闭 */
	GPIOC->ODR |= 1 << (13);//0010 0000 0000 0000  
		//设置

(PC13设置为低电平)

	/* 输出低电平,开启 */
	GPIOC->ODR &= ~( 1 << (13) );
		//清除

二、完整代码

main.h

#ifndef __MAIN_H 
#define __MAIN_H 

#include "stm32f10x.h"//顶层1头文件; 

#include "led.h"

#endif

main.c

#include "main.h"

int main( void )
{
	LED_Init();
	
	/* 输出高电平,关闭 */
	GPIOC->ODR |= 1 << (13);//0010 0000 0000 0000  
		//设置

	/* 输出低电平,开启 */
	GPIOC->ODR &= ~( 1 << (13) );
		//清除
	
	return 0;
}

led.h

#ifndef __LED_H 
#define __LED_H 

//函数声明;
void LED_Init(void);//led初始化; 

#endif

led.c

#include "led.h"//引用头文件;

#include "main.h"

void LED_Init(void)//led初始化 
{
	/* 使能IO口时钟,C组 */
	//设置-第四位; 
	RCC->APB2ENR |= 1 << ( 4 ); //不影响其它位; 
	
	/* 配置IO口模式,PC13推挽高速 */
	//清除-20、21、22、23. 
	GPIOC->CRH &= 0xFF0FFFFF;//1111 1111 0000 1111 1111 1111 1111 1111 ; 
	//赋值。
	GPIOC->CRH |= 0x00300000;//0011 = 3; 
	
	/* 输出高低平,初始为灭 */
	GPIOC->ODR |= 1 << (13);//0010 0000 0000 0000  
}

三、拓展

(即:BSRR、BRR寄存器的应用)

1.BSRR寄存器(低16位作为设置使用)

	//设置位
	GPIOC->BSRR = 0x2000;

2.BRR寄存器(低16位作为清除使用)

	//清除位
	GPIOC->BRR = 0x2000;

总结

(寄存器-编程-方法)

1.当0对其它位无影响时,使用此方法(直接赋值)

(清除/设置)

	//设置位
	GPIOC->BSRR = 0x2000;
	//清除位
	GPIOC->BRR = 0x2000;

2..当0对其它位有影响时,使用此方法【修改单个位】

(清除/设置)

	/* 输出高电平,关闭 */
	GPIOC->ODR |= 1 << (13);//0010 0000 0000 0000  
		//设置
	/* 输出低电平,开启 */
	GPIOC->ODR &= ~( 1 << (13) );
		//清除

3..当0对其它位有影响时,使用此方法【修改多个位】

(清除/设置)

	/* 配置IO口模式,PC13推挽高速 */
	//清除-20、21、22、23. 
	GPIOC->CRH &= 0xFF0FFFFF;//1111 1111 0000 1111 1111 1111 1111 1111 ; 
	//设置。
	GPIOC->CRH |= 0x00300000;//0011 = 3; 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值