关于STC15W系列串口开发的踩坑

关于STC15W系列的串口开发

整体来说难度不大,但是存在非常多的细节,稍不留意就会踩坑,故此记录。

  1. 该系列单片机只有1个串口(串口1),可以映射到三组引脚上,形成三个伪独立串口

    1. 在发送上,和真正的三个串口区别不大,因为只是一个单线程的MCU,只需要每次发送时,切换 AUXR1寄存器的状态
    2. 在接收上,因为实际上只有一个串口,只能使用一个串口中断,当映射到引脚组A时,来自组B的数据将无法触发串口接收中断。
    3. 此外,串口需要接收的数据,往往不止一个字节,因此需要用到信号量(互斥锁),来保证一个数据包的完整接收。
  2. 该系列只有定时器0和定时器2(还有三个严格来算不是定时器)
    实际上可用于串口的定时器只有T2
    因此,在配置串口时,如果使用了定时器1,则无论如何都不可能成功。

  3. 不要在串口接收中断里使用串口发送功能
    这一行为极其容易使代码陷入死循环

  4. 这是一个意外的bug:一旦给串口下载器断电,MCU会自动发送串口数据

我的两个按键接在了P30和P31上,且程序要求按下时(低电平),向串口发送数据
当下载器断电,但是没有从P30和P31断开,MCU就会检测到低电平,然后一直发送数据
难绷

你可能感兴趣的:(单片机,嵌入式硬件,驱动开发)