单片机串口通信只使接收数据才进入串口中断的程序是否这样

单片机串口通信只使接收数据才进入串口中断的程序是否这样,第1张

如果开了串口中断,那么只要满足条件后肯定会进入的。如果发送要不进的话,必须发送前关闭串口中断控制位。

void UART_T (unsigned char UART_data)

ES=0;

SBUF = UART_data;

while(TI == 0);

TI = 0;

ES=1;

void USART3_IRQHandler(void)

{

u8 res;

if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//½ÓÊÕµ½Êý¾Ý

{

res =USART_ReceiveData(USART3);

if((USART3_RX_STA&(1<<15))==0)//½ÓÊÕÍêµÄÒ»ÅúÊý¾Ý,»¹Ã»Óб»´¦Àí,Ôò²»ÔÙ½ÓÊÕÆäËûÊý¾Ý

{

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

{

TIM_SetCounter(TIM7,0);//¼ÆÊýÆ÷Çå¿Õ //¼ÆÊýÆ÷Çå¿Õ

if(USART3_RX_STA==0) //ʹÄܶ¨Ê±Æ÷7µÄÖжÏ

{

TIM_Cmd(TIM7,ENABLE);//ʹÄܶ¨Ê±Æ÷7

}

USART3_RX_BUF[USART3_RX_STA++]=res; //¼Ç¼½ÓÊÕµ½µÄÖµ

}else

{

USART3_RX_STA|=1<<15; //Ç¿ÖÆ±ê¼Ç½ÓÊÕÍê³É

}

}

}

}

结构很规矩,这个程序

首先单片机上电复位,运行死循环前面的程序(,你这里就是init_timer(); // 应该叫初始化定时器,才合适,让定时器按照你需要的定时长度工作,或叫产生中断 )

接下来单片机主程序就是一直在死循环了。我们的主要任务一般在这里处理。

中断,就是在处理一些特殊任务,比如按键,或定时处理的程序,或外部一个不知道什么时间发生的任务,或通信任务等等。你在主循环的时候,无论在什么时候,中断请求来了(可以理解为需要处理比较紧急任务,优先处理的任务),就会暂停主循环,进入对应中断服务程序。运行完,在回主循环的暂停地方,继续执行死循环的任务。

定时器中断,就是每过一定时间,运行一下中断服务程序。常用来计时和产生脉冲信号。

初始化定时器,就是给定时器的寄存器,设置工作模式,时钟源,溢出的计数值。设置好了,定时器就能根据每个时钟源的频率,进行计数,直至溢出,然后产生一个中断请求。如果不饿能自动加载计数初值的定时器,在中断处理函数(服务函数)必须手动加载初值。

利用TUSB3410 USB-TO-UART桥接芯片实现MSP430微控制器与USB设备通讯的一种接口方案

通过该USB接口可实现高达921 600bit/s的数据传输速率,也可通过该接口下载MSP430程序代码,是一种MSP430系列微控制器的高效USB接口解决方案

硬件设计

系统结构框图如图1所示,主机PC与MSP430之间可进行全双工串口通讯,主机PC经TUSB3410虚拟的一个COM口与MSP430的硬件USART模块进行通讯,本文重点叙述TUSB3410与MCU之间的软、硬件设计。

系统采用USB总线供电模式,MCU可通过I2C接口对TUSB3410进行在线编程及外部EEPROM存储器的配置。

1TUSB3410接口芯片

TUSB3410为TI公司推出的一款用于USB-TO-UART端口的桥接器,包括通过USB总线与主机进行通信所必需的全部逻辑电路,符合USB20规范,支持最高12Mb/s的全速传输,支持USB中止、恢复及远程唤醒功能;同时,其内部包含一个8052的CPU核、16KB RAM、包含I2C引导加载程序的10KB ROM,4个通用I/0口,具有USB总线供电和自带电源两种供电模式。

TUSB3410引脚框图如图2所示:

2.USB配置

TUSB3410可以支持多种应用,本文所描述的参考设计配置如表1所示。

对于USB的兼容性来说,任意USB设备都具有唯一的VID(厂商识别码)和PID(产品识别码),VID/PID值作为一描述符传输给主机PC,并且与存储在驱动INF文件中的值相匹配, *** 作系统根据VlD/PID加载不同的驱动程序。

外部EEPROM用于存储配置参数,如VID/PID信息等,既可通过MCU经12C模块将EEPROM的镜像文件写入EEP-ROM,也可通过专用EEPROM编程器直接对EEPROM进行镜像文件写入TUSB3410也通过12C接口读取EEPROM数据。

3.硬件电路原理

系统原理图如图3所示,本文以MSP430F1612(U1)为例,任意一款内部含UART模块的MSP430微处理器均可与TUSB3410连接,MSP430F1612为MSP430系列中的高端MCU,丰富的资源使得开发具有更多的灵活性。

MSP430F1612选用8MHz晶振工作,MCU的6个引脚P1-P6通过PORT1-PORT6的8引脚插针引出,方便MCU与TUSB3410(U2)及外围器件的连接;SW1-SW4按键和LED1-LED4指示灯均通过I/O口控制,演示测试过程;同时,MCU与标准14针JTAG接口连接用于调试程序或调整电压值。

系统采用USB总线供电,同时LED5指示灯点亮,TUSB3410(U2)的USB数据信号经双路USB端口瞬态抵制器SN75240(U3)后连接到标准的USB B型连接口,以增强系统ESD抗干扰能力;USB总线提供的5V电压经TPS77301(U4)36V LDO稳压后作为MCU系统的VCC电压。

外部EEPROM(U5)通过12C通讯并存储USB配置参数,EEPROM的大小根据存储量选择,编程时通过短接JP1跳针与EEPROM的SCL信号线相连,同时TUSB3410通过USB将标准的VID/PID值传送到主机PC。

TUSB3410选用12MHz晶振,与MCU信号连接如表2所示,数据传输时,MCU的UART模块开始工作,支持TUSB3410所有波特率,同时通过12C模块与外部EEPROM采用在线编程方式直接存储数据MCU的P3O/SETO引脚作为TUSB3410的复位脚,当MCU访问EEPROM时,复位该引脚,当没有外设连耐也可用该引脚进行复位测试。

4.低成本参考设计

系统的功耗设计可以从两方面考虑:(1)不使用外部EEP-ROM;(2)不使用外部晶振。

(1)不使用外部EEPROM

利用TUSB3410实现的USB转UART接口可以不使用外部EEPROM,VID/PID描述符使用TI的默认缺省值,TUSB3410固件从主机PC上下载即可实现通讯,但是,存在两个问题:①因为不具备唯一VlD值,系统的USB设备兼容性不好;②当主机检测到两个不同USB设备,具有相同的VID/PID和序列号时,可能会导到USB设备不能正常工作或发生设备连接冲突所以,通常设计中不推荐采用此方法,除非该系统为独立总线工作方式,即不与外界任何USB设备同进与主机通讯。

(2)MSP430微控器器不使用外部晶振

TUSB3410由CLKOUT引脚输出UART波特率或一个固定的3556MHz的频率信号,该频率信号可以作为MCU的外时钟输入,这种稳定的频率信号可作为MCU外设的工作频率,此时MCU无须连接外部晶振。

当系统选用TUSB3410产生的频率作为MCU时钟时,只需修改TUSB3410固件,通过设置MODECNFG配置寄存器的CLKOUTEN位,CLKOUT位使能输出,同时,CLKSLCT位用于选择以UART输出还是固定频率输出。

修改后的固件存放在外部EEPROM或存放于系统的驱动程序包中,当存于系统驱动程序包中时,设备连接时修改后的固件自动从 *** 作系统驱动程序中载入,MCU的OSCFAULT位用于检测是否系统使用外部晶振当TUSB3410输出73728MHz频率作为MCU的UART模块的时钟源时,此时UART传输速率可达921 000波特。

软件设计

MCU固件的主程序流程图如图4所示,MCU上电复位后调用InitSystem()初始化程序,初始化外设、看门狗、通用I/O口等,设置系统时钟为外部8MHz晶振,同时将USARTO设为12C模式与外部EEPROM实时通讯。

MCU初始化时,TUSB3410处于复位状态,MCU通过12C直接检测外部EEPROM的有效地址位和ACK应答位,当接收到有效ACK信号时,则调用EEPROM-Verify()程序校验该EEPROM中的程序是否与MSP430F1612内部Flash存储的EEPROM镜像文件一致若检测到外部EEPROM为空,则调用EEPROM_Write()程序将MSP430F1612内部Flash存储的EEPROM镜像写入EEPROM当EEPROM程序更新后,TUSB3410释放复位信号,读取外部EEPROM值,当连接到USB主机控制器时,TUSB3410会将这些数据提供给USB主机核对,同时将MCU复位引脚设为NMI模式,防止MCU意外复位。

初始化后,MCU通过Timer_B7模块检测SWl-SW4按键状态,当有键按下,捕获/比较模块捕捉到按键的上升沿信号时产生中断,同时唤醒MCLJ。

中断服务程序流程图如图5所示,首先将USARTO设为UART异步串口模式,然后以460 800波特进行通讯,一帧数据通信的字符格式为8位数据位和1个停止位,没有奇偶校验位当系统要求高速率传输时,主机PC需打开虚拟COM口,并MCU配置相匹配,此时MCU传输速率可达到921 600波特。

以上就是关于单片机串口通信只使接收数据才进入串口中断的程序是否这样全部的内容,包括:单片机串口通信只使接收数据才进入串口中断的程序是否这样、stm32 串口接收字符串 中断程序怎么写、单片机中断程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9726047.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存