一、概述
? ? ? ?本文主要介紹GPIO 作為輸出時的寄存器配置。包括時鐘配置,輸出模式配置。以STM32F10xxx系列為例,配置PA8、PD2端口作為輸出,輸出高/低電平。
二、配置流程
? ? ? ? 1)GPIO外設(shè)時鐘
? ? ? ? ?通過查找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'
? ? ? ? ? ? ?注:如果出現(xiàn)同時配置BR2和BS2為1即端口需要置位且需要復(fù)位,則此時置位生效,電平輸出為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的區(qū)別
? ? ? ODR 可讀寫,相對耗時序,BSRR和BRR只能寫,但不耗時序。由上可知配置PA8輸出電平。
ODR寄存器,配置的時候只需配置端口8,其它bit位要保持原樣。因此操作如下:
GPIOA->ODR |= 1 << 8;
讀取ODR寄存器->或運(yùn)算->寫入
(GPIOA->ODR |= 1 << 8
->
GPIOA->ODR = GPIOA->ODR | (1 << 8))
而BSRR和BRR寄存器只需:
GPIOA->BSRR = 1 << 8;
GPIOA->BRR = 1 << 8;
?賦值即可,因?yàn)槿缦绿匦裕?/p>
? ? ? ? ? 在手冊上有如下描述:
文章來源:http://www.zghlxwxcb.cn/news/detail-819982.html
即用BSRR和BRR去改變管腳狀態(tài)的時候,沒有被中斷打斷的風(fēng)險(xiǎn)。也就不需要關(guān)閉中斷。因?yàn)锽SRR寄存器的操作只有一個動作賦值。文章來源地址http://www.zghlxwxcb.cn/news/detail-819982.html
到了這里,關(guān)于STM32 寄存器配置筆記——GPIO配置輸出的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!