野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24723|回复: 5

【求助】关于stm32数据传输和LCD显示问题

[复制链接]
发表于 2020-10-21 20:05:55 | 显示全部楼层 |阅读模式
打算整一个激光测模块测出数据后显示到lcd上的程序,
串口助手发送字符串到lcd上已经能成功显示了,但测距模块传输到lcd时却一直没有显示


已经搞了几周了,用了很多办法依旧不能成功,于是来求助
一、硬件
板子:f103霸道
测距模块:
波特率19200 数据位8 停止位1 无校验
接收到一个特定字符后,返回这个字符,然后进行测距操作后返回测到的数值,字符串类型,以换行符结尾
二、程序
串口中断程序:
void DEBUG_USART_IRQHandler(void)
{
        uint8_t num=0;
        /* 接收的数据长度 */
        uint32_t buff_length;
        /* 使用串口DMA */
        if(USART_GetITStatus(DEBUG_USARTx,USART_IT_IDLE)!=RESET)
        {
                /* 关闭DMA ,防止干扰 */
                DMA_Cmd(USART_RX_DMA_CHANNEL, DISABLE);  /* 暂时关闭dma,数据尚未处理 */
               
                buff_length = USART_RX_BUFF_SIZE - DMA_GetCurrDataCounter(USART_RX_DMA_CHANNEL);

                /* 清DMA标志位 */
                DMA_ClearFlag( DMA1_FLAG_TC5 );   
               
                /* 重新赋值计数值,必须大于等于最大可能接收到的数据帧数目 */
                USART_RX_DMA_CHANNEL->CNDTR = USART_RX_BUFF_SIZE;   
               
                /* 此处应该在处理完数据再打开,如在 DataPack_Process() 打开*/
                DMA_Cmd(USART_RX_DMA_CHANNEL, ENABLE);
               
                num++;
               
                // 清除空闲中断标志位
                USART_ReceiveData( DEBUG_USARTx );
        }
        while(num==1)
        {
                int i;
                //把dma接收到的数据逐位写入新的数组,
                for(i=0;i<buff_length;i++)
                {
                  RX_date1=Usart_Rx_Buf;
                }
                //向串口输出数组内字符串
                num=0;
        }

主函数
int main ( void )
{


        ILI9341_Init ();         //LCD 初始化
        USART_Config();               
        EXTI_Key_Config();   //按键中断,用来使用按键向串口发送字符使测距模块开始测距


        ILI9341_GramScan ( 6 );
        while ( 1 )
        {
          LCD_Test();
        }
       
       
}

lcd调用数组:


void LCD_Test(void)
{
  LCD_SetFont(&Font16x24);
  LCD_SetTextColor(GREEN);


  LCD_ClearLine(LINE(4));
  ILI9341_DispStringLine_EN (  LINE(4), RX_date1 );
  
  Delay(0xFFFFF);  //延时
}



回复

使用道具 举报

 楼主| 发表于 2020-10-21 20:17:02 | 显示全部楼层
按理说我串口波特率设置没错,串口调试助手上以19200的波特率向板子发送数据是能正常显示的,
使用测距模块后,单片机向测距模块发送字符没问题,但返回的数据确一直不能显示
唯一能看到返回数据的是直接把串口的数据写到一个变量里面,然后参考例程里面的把变量转为字符型然后显示
但这样只能显示一个16进制数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-23 19:00:52 | 显示全部楼层
目前看来可能是我接收的过程或者接收后处理的过程出问题了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-23 20:01:38 | 显示全部楼层
这是使用ue看到的测距仪输出内容,
由以上可知应该是我在 接收数据-发送到lcd显示 这一过程中出现了问题
野火论坛202010231959104365..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 02:37:59 | 显示全部楼层
看来我找到问题了,
应该是读取串口数据-写入到数组这一步出了问题,
读到的数据没办法正确写入到数组里面,不知道哪里出问题了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 19:56:52 | 显示全部楼层
好家伙,终于读取出来了,
把串口改为usart1后终于能正常读取,
不过我还是有个疑问,为什么其他串口无法读取。
使用串口助手实验时时可以从pc读取出字符串的
看到这里的人,如果你曾经遇到并解决这个问题,可以告诉我这是为什么吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 05:32 , Processed in 0.033940 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表