STM32单片机GPIO口的学习

发布时间:2023-08-31  

  GPIO:

  STM32的(64引脚的)IO口一共有3个,分别是PA、PB、PC.

  STM32的IO端口可以由软件配置成8种模式:

  1,输入浮空

  2,输入上拉

  3,输入下拉

  4,模拟输入

  5,开漏输出

  6,推挽输出

  7,推挽复用功能

  8,开漏复用功能

  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总线上的外设时钟使能寄存器)

  1.CRL和CRH寄存器--》控制IO口输出还是输入。

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

  STM32的CRH控制着每个IO端口(A~G)的高8位的模式(例如PA8-PA15)。每个IO端口的位占用CRH的4个位,高两位为CNF,低两位为MODE。

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

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

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

  3. BSRR 端口位设置/清除寄存器和BRR端口复位寄存器

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

  GPIO-》BSRR |=(1《《(5+16));为什么加16,你明白的。

  而BRR与BSRR操作一样。

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

  参考手册说明BRR和BSRR的时候,发现有几句话(在GPIO那一章里):

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

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

  最终结论就是如果中断中要对IO口设置,最好使用BSRR和BRR操作,而不要用ODR.


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>