极客秀
搜索

我的STM32为什么会突然卡死?由于没有进行重定向而导致的LCD卡死。串口和屏幕奇怪的联动

最近有同学像我请教他的LCD屏幕无法使用。首先的现象是屏幕已经亮了,但是无法显示字符或者其他操作。

看似是没有点亮屏幕, 其实这是一个非常关键的现象 !屏幕的这个亮度,其实已经说明了LCD被驱动成功了!肯定是因为其他的原因导致程序死机了。

而我收到这个屏幕的时候, 仅有STlink用来供电和下载 (其实我拿到的时候已经猜到是什么问题了)
于是我打开他发给我的驱动。

可以看到,驱动非常完备,编程习惯优秀且美观,可以肯定这是一款移植性非常好的驱动。

并且其初始化函数中,也会根据LCD ID的不同对不同设备进行不同的初始化操作。 可以说这份代码做的非常的优秀。
那么朋友们看到这里还没有意识到问题嘛? 没错,其初始化函数中调用printf函数,而这个函数必须依赖于串口重定向还需要打开魔术棒中的特殊设置。

不然就会导致整个程序出现死机。 所以最好的解决办法就是 去掉printf函数或者正确的配置串口并进行初始化

可以看到,正确的初始化之后我们可以显示我们的字符,所以破案,由于没有进行串口重定向而导致的串口卡死的问题。 其实这里还有一个问题。
按理来说画笔的默认颜色是红色,但是我发现我写的时候没有用,然后我就把画笔的颜色改为了黑色,发现就可以用了,就非常的奇怪。


int main(void){  /* USER CODE BEGIN 1 */  
  /* USER CODE END 1 */  
  /* MCU Configuration--------------------------------------------------------*/  
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */  HAL_Init();  
  /* USER CODE BEGIN Init */  
  /* USER CODE END Init */  
  /* Configure the system clock */  SystemClock_Config();  
  /* USER CODE BEGIN SysInit */  
  /* USER CODE END SysInit */  
  /* Initialize all configured peripherals */  MX_GPIO_Init();  MX_FSMC_Init();  MX_USART1_UART_Init();  /* USER CODE BEGIN 2 */  TFTLCD_Init();  POINT_COLOR = BLACK;  LCD_ShowString(10,10,300,100,24,"Hello World");  /* USER CODE END 2 */  
  /* Infinite loop */  /* USER CODE BEGIN WHILE */  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */  }  /* USER CODE END 3 */}  

所以大家在使用STM32的时候,出现了许多问题实际上是有迹可循的,非常考验大家的编程功底。
例如当我LCD接上电发现可以亮的时候。其实我就已经明白了估计并不是LCD的问题,而当我看到没有使用串口的时候就已经能大致猜到和串口卡死有关系了。

所以如果我们习惯性的使用LED的闪烁来判断程序有没有卡死,就会明白我们的程序有没有卡死。
所以优秀的编程习惯可以节省我们大量的时间,帮我更好的完成我们的任务。
而这就需要我们平时的经验积累,例如知道这种库函数会使用printf调用,串口重定向没处理好会导致程序死机,屏幕白色说明初始化已经成功了(不成功大部分就是黑色)出现了雪花屏幕和白色就说明是已经成功了的,不过白色大部分的原因都是屏幕大小没有设置好。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容