NUC100RE3AN串口接收程序
来源:互联网 发布:嘉兴王店网络维修电话 编辑:程序博客网 时间:2024/04/29 05:06
读这篇文章之前,要先读上一篇文章《NUC100RE3AN串口驱动库修改》
本人在实习中的项目需要接收一个具有25个数据的包,起始0x0f,结束0x00,需要用定时器检测是否丢包,使用库函数DrvUART_Read效果并不好。下面给出我的做法。
1、首先是初始化
</pre><pre name="code" class="plain">
void init(){UNLOCKREG ();DrvSYS_Open (12000, 50000);DrvSYS_SetOscCtrl (E_SYS_XTL12M, 1);DrvSYS_SetHCLKSource (2);DrvSYS_SetIPClockSource (E_SYS_UART_CLKSRC, 0);DrvGPIO_InitFunction (FUNC_UART2);//UART²ÎÊýÅäÖÃuartParam.u32BaudRate = 100000;uartParam.u8cDataBits = DRVUART_DATABITS_8;uartParam.u8cParity = DRVUART_PARITY_EVEN;uartParam.u8cStopBits = DRVUART_STOPBITS_2;uartParam.u8TimeOut = 30;uartParam.u8cRxTriggerLevel = DRVUART_FIFO_62BYTES;DrvUART_Open(UART_PORT2, &uartParam);DrvUART_EnableInt(UART_PORT2 ,DRVUART_RDAINT, (PFN_DRVUART_CALLBACK *)UART_Callback);}
</pre><pre name="code" class="plain">2、产生接收中断时的回调函数。
void UART_Callback(uint32_t u32uart2IntStatus){uint32_t i;if(u32uart2IntStatus & DRVUART_RDAINT){while(1){while( (UART2->FSR.RX_EMPTY)==1 ){i++;if(i>100000){goto NEXT;}}UART_data[UART_data_Index] = UART2->DATA;if(UART_data[0]!=0x0f){UART_data_Index=0;}else{UART_data_Index++;if(UART_data_Index>24){break;}}}NEXT:if(UART_data_Index>24)//进行相应的处理{if( UART_data[0]==0x0f ){if(UART_data[24]==0x00){}}}}}
说明:
if(u32uart2IntStatus & DRVUART_RDAINT)这个判断必须有。因为UART2的接收缓存只有16个字节,溢出时也会产生中断。而我需要连续接收25个。
goto语句纯属贪一时方便,建议进行修改。
0 0
- NUC100RE3AN串口接收程序
- NUC100RE3AN串口驱动库修改
- STC12C5A60S2 串口中断接收程序
- msp430 串口接收程序处理
- 串口通信USART接收程序
- GPS串口数据接收程序实例
- GPS串口数据接收程序实例
- MS51单片机通用串口发送接收程序
- C51串口中断接收和发送程序
- ht46ru232 串口接收、发送程序 C语言
- 写一个串口接收发送程序
- PIC24串口发送和接收程序
- 一个简单的串口接收数据程序
- MSP430串口接收程序(使用中断)
- 你的串口程序在虚拟串口上正常通信,物理串口却接收不到返回
- ATMEGA16串口发送和中断接收CVAVR程序
- 串口程序接收数据一段时间后出现乱码
- 基于状态机编程思想的串口接收程序
- hdu4497 lcm and gcd
- 我的核弹C++(一)Void 类型作用
- ASK每周精彩问答 最纯粹的技术分享社区
- WCF REST 工作总结(二)
- mysql explain type
- NUC100RE3AN串口接收程序
- iOS cell(UITableViewCell)自适应布局
- java拦截器
- [BUG记录] android动画
- 点击获取邮箱验证码带时间(js)
- android常用工具类 --- UI操作
- idata
- 第五篇第二节T语言实例开发,百变字符(版本5.3)
- R语言如何将读写大数据(RData) Large matrix table