yincheng.zhong
2024-09-24 dcfa7fb0b7a336114597ec665e33c7c3cb98d917
1
8.8:添加了gps和调试串口复用逻辑,遇到问题:串口1切换io脚进行复用,发现gps所在的io引脚设置为串口功能时可以正常与上位机交互,但是一旦切换为另外一个io脚配置为串口1为调试串口则无法继续使用,且调试串口与上位机交互根本收不到上位机发出的数据,刚开始debug调试发现是逻辑问题,把切换好的管脚又直接设置回去了,导致调试串口没数据,但是改完了后发现仍然dma接收没有数据,于是注释了切换之间的代码,发现都没有用,于是怀疑是否是dma为关闭和切换所导致,咨询了技术,发现是在切换前uart前引脚没有配置为普通gpio引脚导致切换失败,于是总结出动态切换引脚逻辑是:把原有uart引脚换为普通引脚,之后关闭uart(这个应该可以省略),之后设置复用引脚功能为uart,再打开uart才能切换成功,切换后再次调用uart_receive函数则会继续在上次切换前的接收缓存区位置继续接收,不会重置或清0。所以两个复用引脚公用一个dma和一个公共的dma缓存区。