OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6674|回复: 8

F407 如何在液晶屏上显示串口1接收到的字符串

[复制链接]

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-8
在线时间
21 小时
发表于 2016-3-5 11:29:12 | 显示全部楼层 |阅读模式
1金钱
探索者F407的板子,请问如何让串口1接收到的不定长字符串显示在液晶屏上啊?

最佳答案

查看完整内容[请看2#楼]

不定长数据用串口空闲中断就好了 [mw_shl_code=c,true]void USART1_IRQHandler(void) //串口1中断服务程序(使用USART_IT_IDLE中断) { u32 Temp_Clear_IDLE; u16 len=USART_RX_LEN;//已接收长度 #ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了. OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断 { USART_RX_BUF[len]=(uint16_t)( ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-3-5 11:29:13 | 显示全部楼层
不定长数据用串口空闲中断就好了
[mw_shl_code=c,true]void USART1_IRQHandler(void)                        //串口1中断服务程序(使用USART_IT_IDLE中断)
{
        u32 Temp_Clear_IDLE;
        u16 len=USART_RX_LEN;//已接收长度
#ifdef OS_TICKS_PER_SEC                 //如果时钟节拍数定义了,说明要使用ucosII了.
        OSIntEnter();
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
        {
                USART_RX_BUF[len]=(uint16_t)(USART1->DR & (uint16_t)0x01FF);//(USART1->DR);        //读取接收到的数据
                USART_RX_STA++;
                len++;
                if(len>=USART_REC_LEN)//缓冲区溢出
                {
                        USART_RX_STA|=0x4000;
                        USART_RxOverflow_Handle();
                }
        }
        if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)  //空闲总线中断,【可以此接收不定长数据】
        {
                Temp_Clear_IDLE=USART1->SR;
                Temp_Clear_IDLE=USART1->DR;//读SR再读DR清除USART_IT_IDLE位
                if(        (USART_RX_BUF[len-2]==0x0D)        &&        (USART_RX_BUF[len-1]==0x0A)        )//接收到的数据必须是0x0d 0x0a结尾
                {
                        USART_RX_BUF[len-2]=0;USART_RX_BUF[len-1]=0;
                        USART_RX_STA-=2;
                        USART_RX_STA|=0x8000;
                }
                else        USART_RX_STA=0;
        }
#ifdef OS_TICKS_PER_SEC                 //如果时钟节拍数定义了,说明要使用ucosII了.
        OSIntExit();                                                                                           
#endif
} [/mw_shl_code]
然后主程序中用LCD_ShowString()就行了
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10899
金钱
10899
注册时间
2014-6-12
在线时间
1040 小时
发表于 2016-3-5 11:35:13 | 显示全部楼层
先解决串口1接收不定长字符,再解决显示在液晶屏上。不知串口1接收不定长字符解决了没有?
回复

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-8
在线时间
21 小时
 楼主| 发表于 2016-3-5 11:49:39 | 显示全部楼层
xuyaqi 发表于 2016-3-5 11:35
先解决串口1接收不定长字符,再解决显示在液晶屏上。不知串口1接收不定长字符解决了没有?

不定长用DMA解决?
回复

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-8
在线时间
21 小时
 楼主| 发表于 2016-3-5 15:18:38 | 显示全部楼层
yyx112358 发表于 2016-3-5 12:47
不定长数据用串口空闲中断就好了
[mw_shl_code=c,true]void USART1_IRQHandler(void)                        // ...

O(∩_∩)O谢谢
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-3-5 18:47:05 | 显示全部楼层

还可以看本论坛大神的空闲中断+DMA
http://openedv.com/forum.php?mod ... 8%B3%A4%CA%FD%BE%DD
回复

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-8
在线时间
21 小时
 楼主| 发表于 2016-3-5 20:00:39 | 显示全部楼层
yyx112358 发表于 2016-3-5 18:47
还可以看本论坛大神的空闲中断+DMA
http://openedv.com/forum.php?mod=viewthread&tid=63849&highlight= ...

你好,请问如何在液晶屏上显示接收来的数据呢?LCD_ShowString(80,270,210,24,24,Res);  提示有错误。
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-3-5 22:50:08 | 显示全部楼层
maxingyu 发表于 2016-3-5 20:00
你好,请问如何在液晶屏上显示接收来的数据呢?LCD_ShowString(80,270,210,24,24,Res);  提示有错误。

什么错误?贴出来一下吧
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-10-25
在线时间
10 小时
发表于 2016-10-25 20:32:16 | 显示全部楼层
有没有源程序呢?楼主能否分享一下
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-14 13:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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