最近刚刚使用STM32L476,在使用寄存器操作串口时遇到一堆问题,最终予以解决。
问题点一:端口配置:
STM32L476的端口配置需要注意复位是的模式为模拟采样模式,为了不影响别的端口的使用,我们首先需要进行相对应的端口模式清零,即GPIOB->MODER &= 0xFFF0FFFF;之后再配置需要的模式即复用模式,
即GPIOB->MODER |= 0x000A0000。对于端口速度和输出模式采用类似的方法。在这之前使用RCC中的寄存器使能相应端口晶振以及USART3的晶振,然后记住在使能UART之前要把相应的uart配置事先配置好。之后在 GPIOB->AF[1]配置为相应的功能,可以根据DATASHEET查找。
问题点二:相关的UART3的中断的开关
因为没有全局中断这个概念,都是单独操作的,具体内容在cortex-M4资料里有,相应的开中断函数以及优先级则在cortex-m4内核代码里,如开中断要调用内核代码:NVIC_EnableIRQ(USART3_IRQn).不进行这步操作不会进入相应的中断的。
问题三:进了中断之后一直不出中断。
这个问题是由于没有在读数据之前(或之后)清除以下标志位.
在中断中要用USART3->RQR |= 0x00000008;//清除RXNE标志和USART3->ICR |= 0x00000008;//清除ORE标志。
我做的这个只是接收中断的,发送的和这个类似操作即可。 |