串口是一种通信方式,这个我不陌生。STM32的串口配置也算是比较简单的,但我为了代码的通用,自己采用了一种比较啰嗦的方式。原因我总结一下:
1. STM32有个IO口的重映射功能,正常情况下串口的IO口是PA9和PA10,特殊情况下可以映射为 PB6和PB7,这就出现一个问题,你第一个项目串口初始化的是PA9和PA10,另一个项目可能 进行了重映射,需要配置PB6和PB7,你这个串口初始化函数就要改,当然改一下也不麻烦,但 对于强迫症的我仍然不想去改函数,所以我定义了两个几个额外的参数,通过预编译的方式让 其自动判断是否进行了重映射。如下
设置为0代表没有重映射,设置为1代表有重映射。紧接着看图:
根据RU_USART1_Remap这个常量的值进行预编译,然后你就会看到初始化函数里面根据常量 RU_USART1_Remap的值不同而开启响应的时钟:
GPIO初始化也根据常量RU_USART1_Remap值的不同自动的替换了IO口:
2. 串口初始化的时候有时需要用到串口中断,有时不需要,这里如果想要统一,也要用到上面的 同样的预编译的方法,只需定义一个常量EN_USART1_RX
接下来就简单了,跟上面如出一辙
一个#if语句解决问题。
当然了,以上这些可能压根儿就不合理,只是我自己的一点点尝试,权当作复习一下C语言了 (不过我翻看了一下库函数源码,里面用到预编译的地方特别多,读源码对C语言的理解有帮 助)