STM32 寄存器配置笔记——GPIO配置输出

一、概述

本文主要介绍GPIO 作为输出时的寄存器配置。包括时钟配置,输出模式配置。以STM32F10xxx系列为例,配置PA8、PD2端口作为输出,输出高/低电平。

二、配置流程

1)GPIO外设时钟

通过查找STM32F10xxx中文参考手册得知,GPIO PORT口的时钟配置在RCC_APB2ENR寄存器的第2~6位,如下图:

使能PORTA 和 PORTD 的时钟:

复制代码
RCC->APB2ENR |= 1 << 2;//enable portA clk
RCC->APB2ENR |= 1 << 5;//enable portD clk

2) 配置GPIO模式

PORT A的PIN 8和PORT D的PIN 2配置为通用推挽(PP)输出模式,GPIO速度配置为50MHZ。CRL寄存器配置的是PIN0~7,CRH寄存器配置的是PIN8~15。

复制代码
GPIOA->CRH &= 0xFFFFFFF0;
GPIOA->CRH |= 0x3;         //GPIO PORTA PIN 8 cfg PP & output 50MHZ
GPIOD->CRL &= 0xFFFFF0FF;
GPIOD->CRL |= 0x3 << 8;    //GPIO PORTD PIN 2 cfg PP & output 50MHZ

3)配置 IO口输出电平

有如下几种方式:

a)配置ODR寄存器

复制代码
GPIOA->ODR |= 1 << 8;//GPIO PORT A PIN8 cfg output level '1'
GPIOA->ODR &= ~(1 << 8);//GPIO PORT A PIN8 cfg output level '0'

GPIOD->ODR |= 1 << 2;//GPIO PORT D PIN2 cfg output level '1'
GPIOD->ODR &= ~(1 << 2);//GPIO PORT D PIN2 cfg output level '0'

b)配置BSRR和BRR寄存器

复制代码
	GPIOA->BSRR = 1 << 8;   //GPIO PORTA PIN8 cfg output level '1'
	GPIOA->BSRR = 1 << 24;  //GPIO PORTA PIN8 cfg output level '0'

	GPIOD->BSRR = 1 << 2;   //GPIO PORTD PIN2 cfg output level '1'
	GPIOD->BSRR = 1 << 18;  //GPIO PORTD PIN2 cfg output level '0'

注:如果出现同时配置BR2和BS2为1即端口需要置位且需要复位,则此时置位生效,电平输出为1。

复制代码
	GPIOA->BRR = 1 << 8;  //GPIO A PIN 8 cfg output level '0'
    GPIOD->BRR = 1 << 2;  //GPIO D PIN 2 cfg output level '0'

三、ODR和BSRR、BRR的区别

ODR 可读写,相对耗时序,BSRR和BRR只能写,但不耗时序。由上可知配置PA8输出电平。

ODR寄存器,配置的时候只需配置端口8,其它bit位要保持原样。因此操作如下:

复制代码
GPIOA->ODR |= 1 << 8;

读取ODR寄存器->或运算->写入

复制代码
(GPIOA->ODR |= 1 << 8

->

GPIOA->ODR = GPIOA->ODR | (1 << 8))

而BSRR和BRR寄存器只需:

复制代码
	GPIOA->BSRR = 1 << 8;
	GPIOA->BRR = 1 << 8;

赋值即可,因为如下特性:

在手册上有如下描述:

即用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险。也就不需要关闭中断。因为BSRR寄存器的操作只有一个动作赋值。

相关推荐
2401_827501284 小时前
51单片机(二):GPIO、中断、定时器与PWM
单片机·嵌入式硬件·51单片机
尼喃6 小时前
HDMI/DP高速差分接口ESD保护:0.3pF超低电容PWESD-5VSDF方案详解
嵌入式硬件
ACP广源盛139246256736 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
Saniffer_SH7 小时前
NAND技术(二):从 Channel、Die/LUN、P/E Cycle 到 LDPC,一次讲透 NAND 里那些最容易误解的概念
人工智能·驱动开发·嵌入式硬件·测试工具·fpga开发·计算机外设·压力测试
辰哥单片机设计8 小时前
STM32音乐播放器
stm32·单片机·嵌入式硬件
周洲08308 小时前
STM32 串口指令控制系统|上位机下发命令控制 LED、继电器,通用指令解析框架
stm32·嵌入式硬件·mongodb
集芯微电科技有限公司8 小时前
PC3100H 专为TFT-LCD面板偏置电源设计双输出100m电流
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
广州灵眸科技有限公司10 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 系统操作-线进程操作
数据库·单片机·嵌入式硬件·算法·php
集芯微电科技有限公司11 小时前
各种大小尺寸TFT-LCD面板供电偏压电源方案IC
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
FREEDOM_X11 小时前
嵌入式——定时器工作原理
linux·c语言·单片机·嵌入式硬件·ubuntu