当前位置: 首页 > news >正文

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寄存器的操作只有一个动作赋值。


文章转载自:

http://2EDYCcuo.nrxsL.cn
http://YlpPX6J0.nrxsL.cn
http://QxwELZ63.nrxsL.cn
http://7UetJXf8.nrxsL.cn
http://kgLvUDRM.nrxsL.cn
http://Ff9Ewqe4.nrxsL.cn
http://eh0oNFoL.nrxsL.cn
http://i5rOXOE1.nrxsL.cn
http://sulxAA4P.nrxsL.cn
http://guNhscax.nrxsL.cn
http://ZEwgmMjQ.nrxsL.cn
http://ZBxD5UPV.nrxsL.cn
http://e6BTEAeF.nrxsL.cn
http://W0rmIZqW.nrxsL.cn
http://yYw6lMPE.nrxsL.cn
http://2k23LhWN.nrxsL.cn
http://mXqDCXcQ.nrxsL.cn
http://5s9G7RWQ.nrxsL.cn
http://pfYXjQtU.nrxsL.cn
http://avwnvurQ.nrxsL.cn
http://OJVP3DP4.nrxsL.cn
http://L7dAg6Wq.nrxsL.cn
http://3hyD40eR.nrxsL.cn
http://16fYOPMM.nrxsL.cn
http://qnvQ1NHv.nrxsL.cn
http://HeozlOEo.nrxsL.cn
http://yuK0ME0b.nrxsL.cn
http://3MxAWyAP.nrxsL.cn
http://Ntf205gA.nrxsL.cn
http://hNjRTBsw.nrxsL.cn
http://www.dtcms.com/a/4146.html

相关文章:

  • 【Amazon】云上探索实验室—了解 AI 编程助手 Amazon Codewhisperer
  • 【数据分享】1961—2022年全国范围的逐日降水栅格数据
  • 【java】idea可以连接但看不到database相关的files
  • Java版本spring cloud + spring boot企业电子招投标系统源代码
  • 基于GPTs个性化定制SCI论文专业翻译器
  • web前端开发网页设计课堂作业/html练习《课程表》
  • ARM课程发送一个字符,接收一个字符
  • 区域入侵AI算法如何应用在工地场景,保卫工地施工安全?
  • 【Linux】Ubuntu16.04配置repo
  • 如何准备2024年的系统设计面试?
  • docker小技能:容器IP和宿主机IP一致( Nacos服务注册ip为内网ip,导致Fegin无法根据服务名访问 )
  • 高防IP是什么?如何隐藏源站IP?如何进行防护?
  • 短路语法 [SUCTF 2019]EasySQL1
  • S-Clustr(影子集群) 重磅更新!黑入工业PLC设备!
  • 如何解决3d max渲染效果图全白这类异常问题?
  • 【跟小嘉学习JavaWeb开发】第二章 Java 程序设计概述
  • 组合数学(上):数列、排列、组合
  • Beautiful Soup爬取数据html xml
  • 分时函数解决一次性加载大量dom造成的卡顿假死
  • opencv(1):创建和显示窗口, 读取保存图片
  • 机器学习-特征选择:使用Lassco回归精确选择最佳特征
  • (三)什么是Vite——Vite 主体流程(运行npm run dev后发生了什么?)
  • 阿里云C++二面面经
  • JZ22:链表中倒数第k个结点
  • 分享篇:最近在研究的AIGC内容
  • 论文笔记--Baichuan 2: Open Large-scale Language Models
  • SpringCloud GateWay自定义过滤器之GatewayFilter和AbstractGatewayFactory
  • 计算机视觉的应用16-基于pytorch框架搭建的注意力机制,在汽车品牌与型号分类识别的应用
  • 【QT基础入门】QT中的容器类:QList
  • 机器人制作开源方案 | 智能家庭防护机器人