单片机/MCU论坛
直播中

王萍

7年用户 1316经验值
私信 关注
[问答]

为什么直接操作GPIO的BRR与BSRR寄存器不管用?

我要通过设置GPIOB.5(在战舰V3开发板上连接到了LED的DS0)来产生高低电平从而触发一个从设备的外部中断。但是我在下面程序段中操作寄存器也无法使得PB.5变为高电平(因为LED一直亮,我认为这就表示PB.5的电平仍为低电平)
//PB5 通过此GPIO发送读取时间的信号给次STM32
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PB5
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
   GPIO_Init(GPIOB  GPIO_InitStructure);//初始化GPIOB.5
GPIOB->BSRR=GPIO_Pin_5;


与此同时,我在UART1的中断服务函数中使用同样的操作寄存器的方法和库函数的方法,问题依旧。
//GPIO_ResetBits(GPIOBGPIO_Pin_5);
GPIOB->BRR=GPIO_Pin_5;
   delay_ms(1000);
   //GPIO_SetBits(GPIOBGPIO_Pin_5);
   GPIOB->BSRR=GPIO_Pin_5;


回帖(1)

庄金樱

2023-10-20 09:55:24
不要用复用功能,直接用推挽输出,还有gpiob的时钟没有打开,还有就是系统时钟配置是否正确,可以用内部时钟,不要超频测一下             
举报

更多回帖

发帖
×
20
完善资料,
赚取积分