去年整串口的时候也是用的定时器2来当波特率发生器,但是死活不能用,所以去年是用定时器1来当波特率发生器,所以后面国赛的时候吃屎了。
今天在练习第十届决赛的时候又遇到了这个问题,由于用的是新模板,所以以为是模板里sprintf的问题,但经过排查不是。经过很久的排查发现是一个很抽象的问题即:
定时器1和2的寄存器是混在一起的,所以写的时候会不小心影响到其他寄存器,
这是他原来的代码,因为他的auxr寄存器是直接写入0x14,导致定时器1的东西被覆写,然后就导致了吃屎的问题。
正确的写法是,改了官方的=写成|=这样,就不会有这个吃屎的问题,所以多模块同时使用的时候要多考虑是否会出现抢占的情况。
2025.3.18记录