最近使用stm32F103系列开发产品的时候,在进行GPIO操作的时候出现了一些奇怪的问题。描述如下:
1.使用ODR操作PC端口,由于主程序和中断同时有对IO口的操作(主程序设置PC3,中断设置PC6),使用的是ODR进行设置,这样的话会出现意想不到的情况。在线调试观察GPIO寄存器的值二者都是对的,实际输出不正确。如果不用ODR,全部改用BRR和BSRR来实现IO口的设置,则不会出现这个问题,一切正确。
2.另一个问题,使用BRR和BSRR的时候,当我使用
#define SPI_FRAM_CS_LOW GPIOC->BRR = GPIO_Pin_5
#define SPI_FRAM_CS_HIGH GPIOC->BSRR = GPIO_Pin_5
时操作不正确,使用
#define SPI_FRAM_CS_LOW GPIOC->ODR &= ~GPIO_Pin_5
#define SPI_FRAM_CS_HIGH GPIOC->ODR |= GPIO_Pin_5
的时候操作就是正确的,后来又做了试验,发现使用
#define SPI_FRAM_CS_LOW GPIOC->BRR |= GPIO_Pin_5
#define SPI_FRAM_CS_HIGH GPIOC->BSRR |= GPIO_Pin_5
也可以。与前面的比较,多了一个或操作,但是按照技术手册没道理啊,
也没看到网上有说这些情况的。各位有遇到类似情况吗?能解释一下到底什么原因? |