关于STC15W系列的串口开发
整体来说难度不大,但是存在非常多的细节,稍不留意就会踩坑,故此记录。
-
该系列单片机只有1个串口(串口1),可以映射到三组引脚上,形成三个伪独立串口
- 在发送上,和真正的三个串口区别不大,因为只是一个单线程的MCU,只需要每次发送时,切换 AUXR1寄存器的状态
- 在接收上,因为实际上只有一个串口,只能使用一个串口中断,当映射到引脚组A时,来自组B的数据将无法触发串口接收中断。
- 此外,串口需要接收的数据,往往不止一个字节,因此需要用到信号量(互斥锁),来保证一个数据包的完整接收。
-
该系列只有定时器0和定时器2(还有三个严格来算不是定时器)
实际上可用于串口的定时器只有T2。
因此,在配置串口时,如果使用了定时器1,则无论如何都不可能成功。 -
不要在串口接收中断里使用串口发送功能
这一行为极其容易使代码陷入死循环 -
这是一个意外的bug:一旦给串口下载器断电,MCU会自动发送串口数据
我的两个按键接在了P30和P31上,且程序要求按下时(低电平),向串口发送数据
当下载器断电,但是没有从P30和P31断开,MCU就会检测到低电平,然后一直发送数据
难绷