[其他ST产品] 求助:ODR和BSRR寄存器

[复制链接]
 楼主| laocuo1142 发表于 2025-2-28 11:23 | 显示全部楼层 |阅读模式
跑马灯实验主函数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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1296

主题

6236

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部

1296

主题

6236

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部