微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 学习笔记 GOIO相关寄存器

学习笔记 GOIO相关寄存器

时间:10-02 整理:3721RD 点击:

和GPIO相关的寄存器

1) RCC->APB2ENR ------使能端口时钟,写1开启时钟

2) GPIOx->CRL------端口的低配置寄存器(配置低8个引脚的属性)

3) GPIOx->CRH------端口的高配置寄存器(配置高8个引脚的属性)

4) GPIOx->ODR------端口数据输出寄存器(写1输出高电平,写0输出低电平)

端口位设置/清除寄存器(GPIOx_BSRR) (x=A..G)

寄存器32位,低16位控制ODR寄存器的值(BSRR低16位写1把ODR寄存器的位变为1,写0不影响ODR寄存器)

总结:GPIOx_BSRR寄存器,低16位,写1引脚输出高电平,写0不改变引脚的电平

      GPIOx_BSRR寄存器,高16位,写1引脚输出低电平,写0不改变引脚的电平(不使用)

例子:PB5输出高电平

      GPIOB->ODR |= (1<<5);   (1<<5)  读GPIOB->ODR  再100000|GPIOB->ODR 最后写入GPIOB->ODR

      GPIOB_BSRR |= (1<<5);---> GPIOB_BSRR = (1<<5);  (1<<5)  写入GPIOB->ODR

端口位清除寄存器(GPIOx_BRR) (x=A..G)

寄存器32位,低16位控制ODR寄存器的值(BRR低16位写1把ODR寄存器的位变为0,写0不影响ODR寄存器)

  例子:PB5输出低平

      GPIOB->ODR &= ~1<<5);   (1<<5) 按位取反 读GPIOB->ODR  再xxxxx&GPIOB->ODR 最后写入GPIOB->ODR

      GPIOB_BRR |= (1<<5);---> GPIOB_BSRR = (1<<5);  (1<<5)  写入GPIOB->ODR

端口输入数据寄存器(GPIOx_IDR) (x=A..E)

我们一般只有在端口是输入状态的时候操作这个寄存器,对它进行读操作,读取IO口的状态

为什么要有输出/输入寄存器?

输出寄存器:单片机通过它向外输出电平

输入寄存器:单片机读取别人给它的电平

什么情况我们会把引脚配置为输入状态?

我们要读取引脚外部的电平情况,必须配置为输入状态

按键的实验

对于按键,单片机能控制它闭合吗?不能

单片机只能读取按键的IO口的电平情况,判断按键的状态

输入状态,必须要考虑引脚没有信号输入的电平

如:KEY_UP,它接有一个上拉电阻,按键不按是高电平;按键按下去是低电平

因为外部已经接有上拉电阻,所以呢IO口配置为:浮空输入

我们要使用按键,也要对按键的IO口进行配置,把它配置为:浮空输入

void key_init()

{

}

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3EA.tmp.jpg

在keil使用模块化编程

模块化编程好处:

1) 方便管理代码

2) 方便别人阅读代码

keil模块化编程是遵循标准C

在.h文件里面做宏定义或者函数声明或者是变量声明

在.c里面实现变量的定义和函数体的实现

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3EB.tmp.jpg

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3FC.tmp.jpg

作业:实现一个功能:按下up键LED1亮,再按up键LED1灭


111111111111111111111111

习惯不错     有助于 理解    记忆  

666666666666666622222222222222222

顶一个。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top