跳转到主要内容

串口

干货 | STM32串口发送数据和接收数据方式总结

cathy 提交于

<strong><font color="#004a85">串口发送数据</font> </strong>

<strong><font color="red">1、串口发送数据最直接的方式就是标准调用库函数 。</font> </strong>

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

第一个参数是发送的串口号,第二个参数是要发送的数据,但是用过的朋友应该觉得不好用,一次只能发送单个字符,所以我们有必要根据这个函数加以扩展:
<pre>void Send_data(u8 *s)
{
while(*s!='\0')
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);
USART_SendData(USART1,*s);
s++;
}
}</pre>

【妙招】一份 " IO口模拟串口 " 独门秘籍

cathy 提交于

<strong>1、聊一聊</strong>

好了,今天为大家带来几种IO口模拟串口"硬核"操作,相信大家对类似于串口这样的电平类通信会有新的认识。

<strong>2、IO模拟串口需求</strong>

"IO模拟UART"是作者大一加入学校创新团队老师出的第一道题目。毕竟当时专业知识不够,心里想:“实验室老师怎么这么变tai,有现成的串口不用,非得整个模拟串口”,接到这个题目一头雾水,于是上网各种找资料,最后基本实现了该功能,实现办法算是最初级的实现方式,不过确实给我开启了嵌入式的大门,所以今天也把这方面的东西分享给大家,希望对大家有帮助。

<strong><font color="#004a85">IO模拟串口需求</font> </strong>

● 很多小伙伴应该都了解到现在很多的高性能的MCU都有大量的串口外设,比如下图的stm32F103系列USART高达5个,然而在我们一般的项目中可能仅仅就使用了2个左右的样子,并且串口外设引脚还可以remap重新映射,这对于那些对串口资源需求量比较大的项目,或许带来了一些缓解的福音。

如何写一个健壮且高效的串口接收程序?

cathy /

学单片机的大概最先、最常写的通信程序应该就是串口程序了,但是如何写出一个健壮且高效的串口接收程序呢?接下来鱼鹰将根据多年的开发经验教你如何编写串口接收程序。

1、传入参数指针

2、互斥锁释放顺序

3、数据帧检查

4、串口空闲

5、通信吞吐量

为了更好的理解接下来的知识点,鱼鹰将设计一个串口框架,让道友心中有一个参考方向。

本篇重点在于解决如何写一个健壮、高效的串口接收数据,发送与接收处理过程略讲。

<strong><font color="#004a85">帧格式</font> </strong>

先聊聊帧格式,一般来说,一个数据帧有以下几部分内容:

万变不离其宗之单片机串口共性问题

cathy 提交于

[导读] 单片机开发串口是应用最为广泛的通信接口,也是最为简单的通信接口之一,但是其中的一些要点你是否明了呢?来看看本人对串口的一些总结,当然这个总结并不能面面俱到,只是将个人认为具有共性以及相对比较重要的点做了些梳理。

<strong>啥是串口?</strong>

首先这玩意儿分两种:

<ul data-tool="mdnice编辑器">
<li><strong>通用异步收发器(UART)</strong>是用于异步串行通信的一种物理层标准,其中数据格式和传输速度是可配置的。</li>
<li><strong>通用同步收发器(USART)<strong>是一种串行接口设备,可以对其进行编程以进行</strong>异步</strong>或<strong>同步</strong>通信。</li>
</ul>

<strong>数据格式</strong>

基于STM32的串口循环队列

cathy 提交于

先说串口,这个应该都知道吧!(不知道的童鞋,先把基本功学好)大部分单片机或者处理器都会带一个或者多个串口,方便进行数据的通信。

那么串口的循环队列是什么?这里以STM32的串口为例,进行解释说明。

假设串口一次只发一个数据,这倒是简单了,每次只对这一个数据进行判断,然后处理相关指令。但现实不会一直都这么美好,很多时候你收到的可能是一大串数据,你要先小心翼翼的把它们存好,然后再依次判断这里面有哪些指令要处理。

<center><img src="http://mouser.eetrend.com/files/2019-02/博客/100017812-60842-st1.png&quot; alt=“” width="600"></center>

假设你定义了一个30个元素的数组a[30],每次串口收到数据都往里面存,存的时候地址加一。这个操作很简单吧,应该是都会的。