历史上的今天
返回首页

历史上的今天

今天是:2024年09月09日(星期一)

正在发生

2018年09月09日 | stm32串口间通信

2018-09-09 来源:eefocus

最近要写个串口间通信的程序,要求PC端输入消息到串口1,然后stm32内部把该消息通过串口2转发出去,串口2得到消息返回,则通过串口1打印在PC端。实际上总体效果就是要是连接了设备的串口2具有串口1的功能,以便观察设备返回的信息以作后续的处理。


使用的芯片是stm32l151,采用中断接收方式,把串口2所收到的消息全部打印出来。


一开始直接参考原子的程序以接收回车键判断接收一次数据结束,实际上这样做的话会导致丢失大量信息,因为信息中可能还含有回车键。于是,便采用100ms连续接收的方式判断一次数据是否接收完成。如果两个数据之间的时间间隔超过100ms,则可以认为这两个数据不属于同一条消息了。这种机制的实现方法可以有很多,可以用定时器,也可以用简单的延时程序。在这里我用的是延时程序。


至于中断程序,因为采用的是100ms连续接收的方法,所以在中断处理中就可以简单很多了,不用判断是否收到了0x0a,0x0d之类的符号,只需要把数据寄存器里的内容保存起来就可以了。


因为串口2接的是设备,希望保存所以设备返回的信息,所以需要采用这种方法,而串口1的中断两种处理方法都可以(回车键和100ms延时)


串口2中断处理如下:


void USART2_IRQHandler(void)

{

 

char res;    

if(__HAL_USART_GET_FLAG(&UartHandle2, USART_FLAG_RXNE) != RESET)//½ÓÊÕµ½Êý¾Ý

{  

res =(uint16_t)(USART2->DR & (uint16_t)0x01FF);

if(USART2_RX_STA<800) //»¹¿ÉÒÔ½ÓÊÕÊý¾Ý

{

USART2_RX_BUF[USART2_RX_STA]=res; //¼Ç¼½ÓÊÕµ½µÄÖµ  

USART2_RX_STA++;

}

}

}



下面是判断接收完成的程序

int USART2_Scan(void)

{

uint16_t ftemp=0,i;

ftemp = USART2_RX_STA;

    if( ftemp != 0 )

    {

HAL_Delay( 100 );

while ( ftemp != USART2_RX_STA )

      {

ftemp = USART2_RX_STA;

HAL_Delay( 100 );

}

      for ( i = 0; i <= ftemp+1; i++ )

      {

RX2_Buff[i] = USART2_RX_BUF[i];                  

      }

USART2_RX_STA = 0;      /* ÖØÖÃÖ¸Õë */

return 1;

}

USART2_RX_STA=0;

return 0;

}



稍微解释一下上面的程序,


USART2_RX_STA是串口2接收缓存区的指针,在中断中该指针会随着接收消息而不断往后移

首先用一个临时指针指向它,然后用一个100ms的延时,如果还没接收完成的话

USART2_RX_STA会继续往后指,而ftemp还是原来的值,所以就可以通过判断延时后的两者是否还相等来判断是否接收完成了,如果100ms过了两个指针还相等,那么毫无疑问接收已经完成了。

要再程序中调用串口2接收的内容,只需要判断这个函数的返回值即可。接收到的内容保存了在RX2_Buff数组里。


推荐阅读

史海拾趣

Design Gateway公司的发展小趣事

1985年,泰德·维特(Ted Waitt)和Mike Hammond两位年轻人决定辍学创业。他们利用维特祖母的15,000美元存款作为担保,从银行获得了10,000美元贷款,租用了一台计算机,并准备了一份三页的经营计划。在维特父亲位于爱荷华州苏城的牧场里,他们创办了TIPC Network公司(Gateway的前身)。公司起步时,主要向得克萨斯电脑器械公司销售零配件,并开展计算机邮购业务。得益于直销商业模式,Gateway在短短四个月内就实现了10万美元的销售额。

G24 Innovations公司的发展小趣事

在快速发展的同时,远阳公司始终不忘履行社会责任。公司积极参与公益事业,通过捐款捐物、志愿服务等方式,回馈社会、关爱弱势群体。此外,远阳还注重环境保护和可持续发展,积极推广绿色生产、节能减排等环保理念。公司建立了完善的环境管理体系和能源管理体系,通过技术创新和管理优化,不断降低生产过程中的能耗和排放。这些举措不仅提升了远阳的企业形象和社会声誉,也为企业的长远发展奠定了坚实基础。

GE (General Electric)公司的发展小趣事
检查各电机是否正常运转,有无异响或过热现象。
达晶微(CREATEK)公司的发展小趣事

达晶微(CREATEK)公司成立于XXXX年,由一群具有丰富半导体行业经验的专家创立。公司初期主要专注于IGBT、MOSFET、FRD、TVS、SBD等功率半导体芯片与器件的研发。凭借其对技术的深刻理解和市场需求的敏锐洞察,达晶微迅速在市场中崭露头角。

AEL [AEL Crystals Ltd]公司的发展小趣事

随着业务的不断发展,AEL Crystals意识到全球化战略的重要性。公司开始在全球范围内寻找合适的生产基地,并在英国、日本、台湾、韩国等地区建立了生产基地网络。这一战略布局使得AEL Crystals能够更好地满足全球客户的需求,同时也降低了供应中断的风险。

Habia Cable公司的发展小趣事

为了提高产品的可用性和客户服务水平,AEL Crystals实施了全面的库存管理政策。公司通过优化库存结构和加强库存监控,确保了产品的及时供应和快速响应客户需求。此外,AEL Crystals还不断提升客户服务质量,为客户提供专业的技术支持和售后服务。这些举措进一步增强了客户对公司的信任和忠诚度。

这五个故事展示了AEL Crystals Ltd公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步到如今的行业佼佼者,AEL Crystals凭借其卓越的技术、全球化的战略布局、持续的创新以及优质的客户服务赢得了广泛的市场认可。未来,我们有理由相信AEL Crystals将继续保持其行业领先地位,并为电子行业的繁荣发展做出更大的贡献。

问答坊 | AI 解惑

开发板连打印机

我现在想用开发板连打印机,但又不会写驱动,我在网上找到了打印的源码。总以为串口打印机是不需要驱动的,今天买时发现串口打印机也有驱动,而店家又不允许我试一试我的程序。请问各位大虾,你们用开发板连过打印机吗?是怎么做到的 串口打印机到 ...…

查看全部问答>

嵌入式程序运行时,硬件CPU空闲多少算正常状态?

嵌入式程序运行时,硬件CPU空闲多少算正常状态? ppc MPC8541 VxWorks…

查看全部问答>

VS2005 调试问题

vs2005 编译发布成功,但弹出“unable to start debugging”这个问题怎么解决呢?先感谢各位回帖者,谢谢…

查看全部问答>

嵌入式技术

安徽省信息产业厅唯一指定的嵌入式实训基地落到合肥市,其培训的课程体系主要是ARM+Linux课程体系 嵌入式系统的基本概念及软硬件开发过程 ARM体系结构及指令 嵌入式集成开发工具ADS的集成开发 LPC2000系列原理及基于LPC2000系列的系统构成 L ...…

查看全部问答>

實用應急便攜手電棒

個人思路是這樣的:      可家用也可探險用。    加防水防塵防摔用於潮濕水等惡劣環境    可使用1~3個LED,以便節能。即使用調光也可以。但電池電壓降到9伏特以下呢?充分利用電池。低電時可手搖發電。 &n ...…

查看全部问答>

申请LM3S8962

三 书包小帮手  它的功能简单,却有很大的用处。我们大学生常常忘记星期几上什么课,几点上,教室在哪儿,老师的名字,电话等。它就像一个学习小管家,功能简单,外形小巧,可以放进书包上的挂饰,娃娃等,它采用防水功能。 它有个显示 ...…

查看全部问答>

ULINK1调试STM32方法基于MDK3.15b

ULINK1调试STM32方法基于MDK3.15b使用注意:此方法仅限个人学习使用,公司的话还是请买正版,这样才有利于KEIL公司开发更好的编译器及调试工具,使用中如造成的任何纠纷(包括法律责任及纠纷)均与本人无关。…

查看全部问答>

万利EK-STM32F改了板子,资料怎么还是老的?

刚刚收到货,是两颗STM32芯片,ST3210-LK1 Rev.E板子和原理图根本就对不上网站上也没找到新的资料郁闷啊…

查看全部问答>

【MSP430共享】基于射频技术的集装箱实时安全报警系统的设计

“ 9·l 1 ” 事件后 , 美国相继推 出了“ 集装箱安全倡议 ” ( CS I ) 和“ 智能保安贸易路线 ” ( S S T) . CS I 的主要 内容之一就是设计和使用智能 化集装箱安 全设备. 文 中介绍 基于 n RF9 0 5无线射频 收发芯片和 MS P4 3 0系列单 ...…

查看全部问答>