stm32开机时,在eeprom读取存储的内容,发送给DGUS屏进行显示数据,但是第一个数据显示是0

stm32开机时,在eeprom读取存储的内容,然后用串口发送给DGUS屏的变量地址进行显示数据,但是第一个数据显示是0,而且之前发送接收数据时串口通信都不存在问题。通过测试eeprom读数据是成功的,但是为什么DGUS屏显示的第一个数据会失败呢?
第一点,有可能是变量地址写错了,
第二点, 有可能是串口传输的问题,
第三点,有可能是dgus屏接收显示数据太慢。
经过咨询DGUS屏的客服,客服的回答是:“ 会有延时,等完全启动后再发 ”。
但是在客服回复我之前,我已经找到的我的问题所在,并且已经解决了我的问题。


其实问题就是串口的发送问题,虽然在此之前串口通信并没有问题,最终还是不太严谨的问题。


//串口发送函数
    void Txd_Byte(u8 data)
   {        
        USART1->DR=data;
        while((USART1->SR&0X40)==0);

   }

     这里判断的是TC位,要等到数据到移位寄存器中完成后,再发送第二帧数据,但是,由于SR寄存器的复位值是0x00c0,即一开始TC位就是置1的,所以当第一次数据写入DR寄存器中的时候头一个while没有起作用,当第二个数据来了就把第一个数据覆盖了,这就是串口的第一个数据丢失了的原因!解决的办法就是直接判断TXE位,把0X40改为0X80即可。
    当数据从发送缓冲器传送到移位寄存器时,设置TXE标志(发送缓冲器空),它表示内部的数据缓冲器可以接收下一个数据了。详情请查阅stm32参考手册。

你可能感兴趣的:(STM32)