博士
最后登录1970-1-1
在线时间 小时
注册时间2017-9-18
|
发表于 2018-4-25 21:34:18
|
显示全部楼层
本帖最后由 非谢家之宝树 于 2018-4-25 21:35 编辑
这是我自己参考网上的写的
- char DEBUG_RecivedDate[DEBUG_DATA_LENGTH]; //接收数据数组
- uint8_t DEBUG_RecivedValue = 0; //接收数据字节数
- uint8_t DEBUG_ReciveEndFlag = 0; //接收完成状态
- 这是中断函数
- void USART1_IRQHandler(void)
- {
- if (USART_GetFlagStatus(DEBUG_USART1, USART_IT_RXNE) != RESET) { //如果接受到数据(产生RXNE中断)
- DEBUG_RecivedDate[DEBUG_RecivedValue] = USART_ReceiveData(DEBUG_USART1); //把数据写入数组
- }
- if (DEBUG_RecivedDate[DEBUG_RecivedValue] == '\n') //根据\n判断是不是发送结束
- //if (USART_GetFlagStatus(DEBUG_USART1, USART_IT_IDLE) != RESET) //测试用无效
- {
- //USART_ClearITPendingBit(DEBUG_USART1, USART_IT_IDLE); //清除IDLE标志位,没卵用
- DEBUG_RecivedDate[DEBUG_RecivedValue + 1] = '\0'; //在接受后在数组的末尾加上字符串结束符号\0
- DEBUG_RecivedValue = 0; //数组位置重置
- DEBUG_ReciveEndFlag = 1; //数据接收完成标志置位
- }
- else
- {
- DEBUG_RecivedValue++; //数组下移
- if (DEBUG_RecivedValue > DEBUG_DATA_LENGTH) DEBUG_RecivedValue = 0; //如果超过数组长度则跳转到数组开头
- }
- if (USART_GetFlagStatus(DEBUG_USART1, USART_IT_RXNE) != RESET) //清除标志位用,备用
- USART_ClearITPendingBit(DEBUG_USART1, USART_IT_RXNE);
- }
复制代码
这个可以接受一定长度的字符串,但是16进制发送时要在结尾加上\n的16进制字符 这个还没研究出好点的判断接收完成的方法#define DEBUG_DATA_LENGTH 512 这个是定义的接受数组长度
|
|