历史上的今天
今天是:2025年01月20日(星期一)
2021年01月20日 | 关于USART很多人都容易忽视的一个问题
2021-01-20 来源:eefocus
https://yunpan.cn/ckInh8YTwWHVP 访问密码 81f9
提供下载的实例实现的功能比较简单,主要是用于验证不同情况下,发送字符的不同。
实例实现功能可以从下面main函数中看的出来,打印数据,进入待机。为了方便用户进入待机不能下载程序,例程使用了一个唤醒按键PC13(可以修改),唤醒有一个LED闪烁和延时,这个期间可以重新下载代码。

Ⅲ、本文要点
这里主要说的是在特殊情况下发送字符软件代码的写法。
特殊情况指的是:
1.调用发送字符串函数“发送完”本机立即掉电;
2.调用发送字符串函数“发送完”从机立即掉电;
【上面两种主要用于芯片对电源控制的项目中】
3.调用发送字符串函数“发送完”立刻进入待机或停机;
其实本文主要说的是两个标志位:USART_FLAG_TXE 和 USART_FLAG_TC.
USART_FLAG_TXE发送缓冲区空标志:说明可以往数据寄存器写入数据了,但并不代码数据发送完成了。
USART_FLAG_TC发送完成标志:这个才是代表USART在缓冲区的数据发送完成了,即从机接收到了数据。
这两个标志的区别在于:它们分别表示数据在发送过程中,在两个不同的阶段中的完成情况。TXE 表示数据被从发送缓冲区中取走,转移到的移位寄存器中,此时发送缓冲是空的,可以向其中补充新的数据了。而 TC 则表示最后放入发送缓冲区的数据已经完成了从移位寄存器向发送信号线 Tx 上的转移。所以,判定数据最终发送完成的标志是 TC,而不是 TXE.
下面讲述在不同代码写法下,得到不同实验效果【调试助手接收数据】:
1.常见写法一


这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。 但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。
2.常见写法二


这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字符是没有发送出去的。
3.常见写法三


这种写法达到的效果和上面两种写法有不一样,发送了10个字符。
4.写法四


这种写法按理说可以实现功能,但实际多次试验结果确实第一字节数据丢失了。
5.写法五(正确写法)


这种写法是比较完成,为了保守起见,在特殊情况下使用该写法。。
至此,常见软件写法都给出了源代码和试验效果,请根据自己实际情况写代码验证。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 02:54 编辑 包括测试程序,原理图,是买的一块开发板上给的。 [ 本帖最后由 chbaaic 于 2008-10-30 11:52 编辑 ] … 查看全部问答> |
|
百利通公司总部设在硅谷,是Nasdaq上市公司,在晶体振荡器领域位居世界前十大。百利通公司在香港和美国都设有研发中心,拥有一批经验丰富的专业设计人员。随着产品线的扩充和区域市场的成熟,先后在台湾、香港、上海设立公司,凭借其遍布全球的销售 ...… 查看全部问答> |
|
采用生物识别技术的门禁系统在安防行业应用已经越来越多,包括银行、监狱、部队等单位已经采用生物识别的门禁系统来加强其管理的安全性和使用的方便性。由于生物识别技术已经开始达到大规模的应用水平,包括产品价格、品质和技术都已经相对成熟 ...… 查看全部问答> |
|
大家好: 请教大家一个问题: 在微软window mobile 的windows media player下的右软键菜单下添加一个菜单项,该怎么添加? 微软是否提供相应的接口? 有谁知道 ...… 查看全部问答> |
|
程序大概这样的,一个试图列表里显示了CF卡中所有的文件,鼠标焦点可以放在文件上,但现在想做一个选取功能,就是,当鼠标单击了一个文件就能直接或按另一个按钮读出他的名字,这样好去CF卡中查找这个文件并对这个文件操作。问题是,怎么读出文件的 ...… 查看全部问答> |
|
公司名称: Carrier Access 公司网址: http://www.carrieraccess.com 电子邮箱: lshi@carrieraccess.com,简历请注明信息出处 工作地点: 上海 外语要求: 英文良好 简历接收方式: 英文及中文 学历: 本科以上 职位描述: -Candidates will ha ...… 查看全部问答> |
|
void FloatToByte(float floatNum,unsigned char* byteArry){ char* pchar=(char*)&floatNum; for(int i=0;i<sizeof(float);i++) { &nb ...… 查看全部问答> |




