历史上的今天
今天是:2025年06月10日(星期二)
2018年06月10日 | 串口发送数据查询方式与中断方式
2018-06-10 来源:eefocus
单片机采用中断或查询方式使用串口,这是根据实际应用的需要确定的,没有好/坏之分。有时之所以采用查询方式处理串口程序,是因为应用程序不苛刻单片机的时间资源,采用查询的方式就能满足应用的需要,所以没采用中断。
大量连续的向串口发送数据,就没有必要使用中断了,因为单片机根本没有时间去处理其它事务,这样采用查询的方式反而效率更高,实际应用中向串口发送数据很少使用中断,更多的是使用接收中断,除非单片机的时间资源特别的紧张,连等待一个数据的发送时间也得利用。
一般发送数据采用查询方式:
以stm32串口为例
void Send_String(uint8_t *str)
{
uint8_t index = 0;
do
{
USART_SendData(USART2, str[index]);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
index++;
}while(str[index] != 0);
}
接受数据一般采用中断方式
这样对时间进行了充分利用, 有数据就产生中断接受,没数据时不用管。
以stm32为例:
void USART2_IRQHandler(void)
{
uint8_t temp;
if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET){
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
temp = USART_ReceiveData(USART2);
if((temp == 'x') || (RXCUNT == 20)){ //字符串以x结尾发送或者超过20个字符时发送
RXCUNT = 0;
RXOVER = 1; //接收完成标志位置位
USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
}
else{
USART_RXBUF[RXCUNT] = temp;
++RXCUNT;
}
}
}
史海拾趣
|
使用max3232 双工时,收发出现干扰现象!望达人指点!! 具体现象是这样,当我从max3232向PC机发数据时,此时如果从上位机PC 发数据到max3232,那么刚才从max3232发送到PC的数据就会被干扰。 用示波器观察过了,确实有一个字节的数据失真了,后面的字节没错。而且捕捉到的这个失真的数据 ...… 查看全部问答> |
|
Code Composer Studio™ IDE v4 免费试用版主要特性与优势 下载您的 Code Composer Studio™ IDE v4 免费试用版,获得 MSP430、C2000、C5000、C6000、Stellaris Cortex-M3、Sitara、Davinci 以及 OMAP 处理器的无缝支持!尊敬的客户,德州仪器 (TI)最新 Code Composer Studio™ 集成开发环境 ...… 查看全部问答> |
|
LPC1114/LPC11U14和LPC1343对比学习(五)UART 终于把支持3种芯片的板子焊接完成了,累死我了,可以继续学习下面的内容了。。。 开发板贴:https://bbs.eeworld.com.cn/viewthread.php?tid=299669&page=1&extra=page%3D1 LPC1114/LPC1343串口特点: 16字节收 ...… 查看全部问答> |
|
本帖最后由 qwqwqw2088 于 2017-9-23 12:08 编辑 一,容量等级 安规电容安全等级应用中允许的峰值脉冲电压过电压等级(IEC664) 2.5kV X2 ≤2.5kV Ⅱ X3 ≤1.2kV —— 安规电容安全等级 绝缘类型 额定电压范围 Y1 双重绝缘或加强绝缘 ≥ 25 ...… 查看全部问答> |




