我用两个stm32f407的之间进行串口通信。通过电脑用串口调试助手发的单片机能收到,电脑也能收到另一个单片机发的,但是用单片机发另一个单片机就不能收到。下面分别附上收、发的部分程序和截图。
发的程序:
iint main(void)
{
u8 t;
u8 len;
unsigned char a[26]={0x41,0x42,0x43};
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //延时初始化
uart_init(38400); //串口初始化波特率为38400
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
for(t=0,len=97;t<3;len++,t++)
{
a[t]=len; //对数组a进行赋值,值为a,b,c 的ascii码
USART_SendData(USART1,a[t]); //向串口1发送数组a
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); //等待发送结束
LED0=!LED0; //每发一次,led亮或灭
}
delay_ms(1000);
}
}
发的单片机和串口调试助手之间的通信
收的程序:
int main(void)
{
unsigned char x=0;
u8 t;
u8 len;
unsigned char num[26]={0x31,0x32,0x33};
unsigned char a[26]={65,66,67};
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(38400); //初始化串口波特率为38400
LED_Init(); //初始化LED
LCD_Init(); //初始化LCD FSMC接口
POINT_COLOR=RED; //画笔颜 {MOD}:红 {MOD}
while(1)
{
if(USART_RX_STA&0x8000) //判断是否接收到了数据
{
LED0=!LED0; //用一个led灯来判断是否收到了数据
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
for(t=0;t<len;t++)
{
num[t]=USART_RX_BUF[t]; //读取串口传来的数据放在数组num里
USART_SendData(USART1,a[t]); //当收到数据,向发送端回馈数组a里的内容
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); //等待发送完成
}
}
USART_RX_STA=0; //将接收状态标记清零
LCD_ShowString(30,110,200,16,16,num); //最后用lcd显示收到的数据
delay_ms(1000);
}
}
收的单片机,收到之后反馈给串口的数据
找到了,例程里的第14,15位是0x0d和0x0a,我只发了仨数,没有后面的,所以收不到。
一周热门 更多>