打印
[其他ST产品]

求助:ODR和BSRR寄存器

[复制链接]
482|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
跑马灯实验主函数int main(void){
delay_init();
LED_Init();
      
        while(1)
        {
        GPIOB->ODR|=1<<5;
        GPIOE->ODR|=1<<5;
        delay_ms(500);
               
        GPIOB->ODR=~(1<<5);
        GPIOE->ODR=~(1<<5);
        delay_ms(500);

        }
}
直接把ODR寄存器改为BSRR寄存器为什么不行,两个功能不是类似吗?
改成这样
int main(void){
delay_init();
LED_Init();
      
        while(1)
        {
        GPIOB->BSRR|=1<<5;
        GPIOE->BSRR|=1<<5;
        delay_ms(500);
               
        GPIOB->BSRR=~(1<<5);
        GPIOE->BSRR=~(1<<5);
        delay_ms(500);

        }
}

使用特权

评论回复
沙发
香水城| | 2025-3-3 16:37 | 只看该作者
二者的操作上不一样。

ODR 写1 就是输出高,写0就是输出低;

BSRR不论置位还是清零,都是对相应的寄存器控制位写1,写0无效。



8195767c56a47056d4.png (74.74 KB )

8195767c56a47056d4.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1295

主题

6188

帖子

14

粉丝