Doley755 2023-05-09 19:43 采纳率: 25%
浏览 15
已结题

为什么stm32如果没有usart初始化lcd显示就有问题

注释掉usart初始化后,屏幕就不显示任何东西了。他们之间有什么联系么?

img


你们可以试试吧usart注释掉,看看显示有没有问题

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-09 22:05
    关注
    • 请看👉 :【STM32】USART接收不定长数据、防止数据溢出
    • 除此之外, 这篇博客: 【嵌入式设计】【炒鸡详细】STM32单片机控制机器人程序设计框架解读(不定时更新)中的 5.1 初始化USART串口 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    •     STM32的发送和接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含了TDR和RDR。当向该寄存器写数据时,串口就会自动发送;当收到数据时,也存在该寄存器中。void USART_SendData(...)的意思就是想USART_DR寄存器写入数据。USART_ReceiveData(...)相反。

          串口状态32位寄存器USART_SR【State Register】反映了串口的状态,它的各个位代表的内容如下图:

          使用这个函数,就可以获取串口寄存器各个位的数值:

          FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

          这里关注两位:Bit5:RXNE;Bit6:TC
          RXNE(读数据寄存器非空):当该位被置一时,说明已经有数据被接收了,并且可以读出来了。此时应尽快读取USART_DR。
          读取USART_DR或向该位写0,都可以清除该位。
          TC(发送完成):当该位被置位时,说明USART_DR中的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。
          清零该位的两种方法:a、读取USART_SR,写USART_DR。b、直接向该位写0。

          初始化串口很简单,一共分为三个步骤:

      1. 配置串口引脚,STM32单片机串口相关的引脚定义如下图,我们使用串口1,则配置PA9(TX)为GPIO_Mode_Out_PP,PA10(RX)为GPIO_Mode_IN_Floating【注意:不要忘记打开GPIO的APB2时钟开关!!】
      2. 配置串口参数,串口参数包括:BaudRate波特率,HardwareFlowControl(硬件控制),USART_Mode(TX还是RX还是TX|RX),USART_Parity(奇偶校验),USART_StopBIts(停止位),USART_WordLength(字长)。【注意:除了波特率之外,其他的所有参数的数值都是有宏定义的,WordLength要用USART_WordLength_8b表示!】
      3. 开启GPIO和串口使能,开启USART接收中断使能(如果使用RX功能的话)
      4. 配置NVIC串口中断优先级,在这里使用的是NVIC_InitTypeDef结构体,需要配置的参数为:1) NVIC_IRQChannel=USART1_IRQn; 2)主优先级IRQChannelPreemptionPriority,3)从优先级NVIC_IRQChannelSubPriority;4)中断使能NVIC_IRQChannelCmd=ENABLE
      5. NVIC_Init(&NVIC_InitStructure); 使能串口中断及优先级。
      6. 在串口中断函数void USART1_IRQHandler(void)中写入处理代码。

          完整的初始化代码如下图:

          

    • 以下回答由chatgpt基于相关博客总结生成:

      根据参考资料的代码,可以看到该代码通过初始化GPIO和USART模块,实现了通过串口向上位机发送数据,并在接收到数据后将其原封不动地返回。关键在于USART的初始化,同时GPIO的初始化也是必要的。

      然而,问题在于为什么注释掉USART的初始化后会影响LCD的显示。这里先强调一点,串口和LCD是完全不同的模块,没有直接的联系。但是可以从另一个角度来考虑这个问题。USART1的TX和RX引脚分别连接到PA9和PA10上,而这两个引脚,对应的是STLink调试器的SWDIO和SWCLK,这两个引脚是属于调试器和目标芯片之间的通信接口。为了避免冲突,STLink调试器会在调试开始时关闭SWDIO和SWCLK,因此在STM32不进行USART初始化时,这两个引脚是被关闭的,而一旦进行USART初始化时,这两个引脚就会被重新打开。这样就会导致当STM32未进行USART初始化时,SWDIO和SWCLK失效,因此会无法使用调试功能。而普通的程序可能不会受到影响,但是像LCD这样需要精确的时序的模块,就会出现问题。

      因此,解决的方案有以下几种: 1. 在USART未初始化时,需要关闭调试模式,这可以通过将JTAG/SWD模式从调试器软件中更改为SWIM模式来实现,或者直接将JTAG/SWD模式从芯片的BOOT0引脚上跳线设置为1。 2. 如果不需要调试功能,可以将SWD功能从芯片引脚上拆除或进行物理断开。

      总之,核心问题在于USART1的引脚连接了调试器的SWDIO和SWCLK,这会导致两个模块间可能存在干扰,从而影响LCD的显示。因此需要采取以上方案进行解决。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 创建了问题 5月9日

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大