中级会员
 
- 积分
- 322
- 金钱
- 322
- 注册时间
- 2020-11-21
- 在线时间
- 50 小时
|
2金钱
本帖最后由 爱学习的Yang 于 2021-4-28 17:04 编辑
用串口调试助手给串口2(A板)发送消息,串口2(A板)将消息传递给串口3(A板),然后串口3(A板)把消息发送给串口3(B板),串口3(B板)再将消息传递给串口2(B板),最后串口2(B板)再发送给电脑。目前可以实现串口调试助手与串口2(A板)的通信,但是不知为何串口2(A板)与串口3(A板)之间不能通信,代码如下,希望各位前辈指点一下。- int main(void)
- {
- u8 t; //typedef unsigned char uint8_t;
- u8 reclen;
- u16 times=0; //typedef unsigned short uint16_t;
- SystemInit(); //系统时钟配置函数,通过不同的时钟定义,来选择不同的主频
- LED_Init();
- delay_init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- Nvic_Init();
- TIM1_PWM_Init(899,0);
- usart2_init(9600); //串口初始化为9600
- uart3_init(9600); //串口初始化为9600
- LED1=1;
- while(1)
- {
- if(USART2_RX_STA&0x8000)
- {
- reclen=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
- USART2_RX_BUF[reclen]=0; //加入结束符
- for(t=0;t<reclen;t++)
- {
- USART_SendData(USART3, USART2_RX_BUF[t]); //向串口3发送数据
- while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
- }
- u2_printf("\r\n\r\n");//插入换行
- u2_printf("USART2_RX_BUF:%s\r\n",USART2_RX_BUF);
- u2_printf("reclen:%d\r\n",reclen);
- if(strcmp((char*)USART2_RX_BUF,"电机1停止")==0)
- {
- HALL_Flag=0;
- u2_printf("\r\n电机1停止\r\n");
- }
- if(strcmp((char*)USART2_RX_BUF,"电机1正转")==0)
- {
- HALL_Flag=1;
- u2_printf("\r\n电机1正转\r\n");
- }
- if(strcmp((char*)USART2_RX_BUF,"电机1反转")==0)
- {
- HALL_Flag=2;
- u2_printf("\r\n电机1反转\r\n");
- }
- USART2_RX_STA=0;
- }
- if(USART3_RX_STA&0X8000) //接收到一次数据了
- {
- reclen=USART3_RX_STA&0X3FFF; //得到数据长度
- USART3_RX_BUF[reclen]=0; //加入结束符
- for(t=0;t<reclen;t++)
- {
- USART_SendData(USART2, USART3_RX_BUF[t]); //向串口2发送数据
- while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
- }
- USART3_RX_STA=0;
- }
- else
- {
- times++;
- if(times%200==0)u2_printf("请输入指令,以回车键结束\r\n");
- if(times%30==0)LED1=!LED1;//闪烁LED,提示系统正在运行.
- delay_ms(10);
- }
- }
- }
- void USART2_IRQHandler(void) //串口2中断服务程序
- {
- u8 Res;
- if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
- {
- Res =USART_ReceiveData(USART2); //读取接收到的数据
- while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
- if((USART2_RX_STA&0x8000)==0)//接收未完成
- {
- if(USART2_RX_STA&0x4000)//接收到了0x0d
- {
- if(Res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始
- else USART2_RX_STA|=0x8000; //接收完成了
- }
- else //还没收到0X0D
- {
- if(Res==0x0d)USART2_RX_STA|=0x4000;
- else
- {
- USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
- USART2_RX_STA++;
- if(USART2_RX_STA>(USART2_MAX_RECV_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收
- }
- }
- }
- }
- }
- void USART3_IRQHandler(void) //串口3中断服务程序
- {
- u8 Res;
- if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
- {
- Res =USART_ReceiveData(USART3); //读取接收到的数据
- if((USART3_RX_STA&0x8000)==0)//接收未完成
- {
- if(USART3_RX_STA&0x4000)//接收到了0x0d
- {
- if(Res!=0x0a)USART3_RX_STA=0;//接收错误,重新开始
- else USART3_RX_STA|=0x8000; //接收完成了
- }
- else //还没收到0X0D
- {
- if(Res==0x0d)USART3_RX_STA|=0x4000;
- else
- {
- USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res ;
- USART3_RX_STA++;
- if(USART3_RX_STA>(USART_REC_LEN-1))USART3_RX_STA=0;//接收数据错误,重新开始接收
- }
- }
- }
- }
- }
复制代码
|
|