stm32外设寄存器配置系列--gpio
·
#include "stm32f10x.h" // Device header
void led_on(void){
// |=,&=,都要先读,修改,写回去,如果在中断里刚好操作同一GPIO就会出现竞争和电平紊乱,有读改写风险,推荐用BSRR
//GPIOA->ODR |= (1ul << 1);
GPIOA->BSRR = (1ul << 5);
}
void led_off(void){
//GPIOA->ODR &= ~(1ul << 1);
GPIOA->BSRR = (1ul << 21);
}
int main(void){
RCC->APB2ENR |= (1ul << 2);
//PA5推挽输出
GPIOA->CRL &= ~(0x0F << (4 * 5));
GPIOA->CRL |= (0x03 << (4 * 5));
//PA6上拉输入
GPIOA->CRL &= ~(0x0F << (4 * 6));
GPIOA->CRL |= (0x08 << (4 * 6));
while(1){
//读到低电平——按下
if(!(GPIOA->IDR & (1ul << 6))){
led_on();
}
else{
led_off();
}
}
}
流程:
1、开启RCC时钟
2、GPIO配置
注意移位操作就好,慢慢熟练。
更多推荐

所有评论(0)