初级会员

- 积分
- 65
- 金钱
- 65
- 注册时间
- 2020-11-23
- 在线时间
- 7 小时
|
5金钱
字符串的接收并发送一直无法实现,想法是分别在中断函数里取值存入数组,在主函数中调用输出函数;自己写出来不知道错在哪,求指点
中断函数:
- char RS485_RX_BUF[64];
- void USART1_IRQHandler(void) //串口1中断服务程序
- {
- int mdbadr=0,LoHex=0,HiHex=0;//寄存器起始地址,地址高位,地址地位
- RS485_1_RX_Mode;
- if(USART_GetITStatus(USART1, USART_IT_RXNE) != 0)
- {
- RS485_1_RX_Mode;
- //接收中断
- Res =USART_ReceiveData(USART1);//(USART1->DR);//读取接收到的数据
- RS485_RX_BUF[RS485_RX_CNT]=Res;//记录接收到的值
- delay_ms(15);
- RS485_RX_CNT++;
- // 接收数据增加1
- if(RS485_RX_CNT==4) //判断
- {
- txset=1;
- USART_ClearITPendingBit(USART1,USART_IT_RXNE);//接收后先清空标志位
- }
- }
- }
复制代码 输出函数:
- void RX_DATA() //发送返回函数
- {
- int a=0;
- for(a=0;a<RS485_RX_CNT;a++)
- {
- printf("%c",RS485_RX_BUF[a]);//把收到的数据以 符号变量 发送回电脑
-
- delay_ms(12);
- }
- }
复制代码 主函数
- int main(void)
- {
- u8 Res;
- u8 i=0,t=0;
- u8 cnt=0;
- delay_init();//延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(9600);
- RS485_1_TX_Mode;
- printf("\r485 config test");
- delay_ms(10);
- RS485_1_RX_Mode;
- // USART_SendString(USART1, "Hello world!\r\n");
- while(1)
- {
- if(txset==1) //判断计数变量达到全长度(或者使用某标志位)
- {
- RS485_1_TX_Mode;
- RX_DATA();
- delay_ms(10);
- }
- }
- }
复制代码
|
|