初级会员

- 积分
- 76
- 金钱
- 76
- 注册时间
- 2020-11-19
- 在线时间
- 11 小时
|
本帖最后由 新手wufu 于 2021-7-15 16:25 编辑
芯片:stm32f103zet6
用cubemx生成程序,波特率115200,两个单片机相同,图片是中断使能以及优先级,实现的功能,一帧数据,起始符为#,结束符为$,中间是数据,从单片机1发送到单片机2,再从单片机2发回单片机1,再由单片机1发送到电脑端。最后电脑端能收到一个#后面全是乱码。程序如下:
uint8_t tempb[200];//单片机2串口1接收单片机1串口2发来的数据
uint8_t tempc[200];//在单片机2中整合数据到这,并串口1发给单片机1串口2
uint8_t tempd[200];//单片机1串口2接收单片机2串口1发来的数据
uint8_t tempe[200];//在单片机1中整合数据到这,并串口1发给电脑
单片机1程序:
在主程序里有
HAL_UART_Transmit_IT(&huart2,“#12$”,6);//串口2将接收到的数据发给单片机2
HAL_UART_Receive_IT(&huart2,tempd,6);//串口2接收单片机2发来的数据
/**********************单片机1接收字符串***********************************/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*huart) //接收回调函数
{
if(huart->Instance==USART2)
{
uint8_t i;
if(tempd[0]==0x23) //判断是否为#
{
for(i=0;i<200;i++)
{
tempe=tempb;
if(tempd==0x24) //判断是否为$,并停止接收
{
i=200;
}
}
HAL_UART_Transmit_IT(&huart1,tempe,6);
}
i= 0;
HAL_UART_Receive_IT(&huart2,tempd,6);
}
}
单片机2程序
在主程序里有
HAL_UART_Receive_IT(&huart1,tempb,6);//串口2接收单片机1发来的数据
/**********************单片机2接收字符串***********************************/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*huart) //接收回调函数
{
if(huart->Instance==USART1)
{
uint8_t i;
if(tempb[0]==0x23) //判断是否为#
{
for(i=0;i<200;i++)
{
tempc=tempb;
if(tempb==0x24) //判断是否为$,并停止接收
{
i=200;
}
}
HAL_UART_Transmit_IT(&huart1 ,tempc,6);
}
i= 0;
HAL_UART_Receive_IT(&huart1,tempb,6);
}
}
|
|