和记娱乐


网站导航

联系我们

和记娱乐

联系人: 

电 话:021-64057486

公司网址:http://www.happy123456789.com

   址:成都市松江区漕河泾松江新兴产业园区研展路丰产支路55号B座803室

邮编:201165


通信知识

您的当前位置: 和记娱乐主页 > 通信知识 >

STM32学习之GPIO详解

发布日期:2019-07-30 10:09 来源:和记h88 发布人:和记娱乐 点击:

  STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。

  注意(在配置STM32外设的时候,任何时候都要先使能该外设的时钟!APB2ENR是APB2总线上的外设时钟使能寄存器)

  STM32的CRL控制着每个IO端口(A~G)的低8位的模式(例如PA0-PA7)。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这里我们可以记住几个常用的配置,比如0X4表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二功能,50M速率)。

  2.IDR寄存器和ODR寄存器--》读取引脚输入的内容(是高电平还是低电平)以及控制你输出的内容(是高电平还是低电平)

  IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,并且只能以16位的形式读出。读出的值为对应IO口的状态。

  ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器虽然为可读写,但是从该寄存器读出来的数据都是0。只有写是有效的。其作用就是控制端口的输出。

  BSRR这个寄存器我用了一些,别的也不会。就感觉超级好用。用起来很方便。比如你端口配置好了。想PA5输出“1”。就GPIOA->BSRR =(1<<5);5是对应的哦。输出“0”,一样的。

  使用ODR操作PC端口,由于主程序和中断同时有对IO口的操作(主程序设置PC3,中断设置PC6),使用的是ODR进行设置,这样的话会出现意想不到的情况。在线调试观察GPIO寄存器的值二者都是对的,实际输出不正确。如果不用ODR,全部改用BRR和BSRR来实现IO口的设置,则不会出现这个问题,一切正确。

  “每个I/O端口位可以编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的访问;这样,在读和更改访问之间产生IRQ时不会发生。”

  “当对GPIOx_ODR的个别位编程时,软件不需要中断:在单次APB2写操作里,可以只更改一个或多个位。这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写’1’来实现的。没被选择的位将不被更改。”

      和记娱乐,和记h88,h88平台官网