我买了两个板子,Mini板(STM32F103RCT6)核心板(STM32F103ZET6)。Mini板发,核心板收,跳线帽拔掉,用两根条线连接PA9-PA10,PA10-PA9,波特率都是9600。Mini板发一个'a'给电脑串口调试助手,可以准确收到字符a。串口助手给核心板发'a'也能收到。但是Mini板给核心板发就收不到。经过实验发现,当来信息时,核心板可以进入接收中断,但是执行res=USART1->DR; b[0]=res;之后,b[0]里面是空的。后来我先后把接受过信息的核心板的b[0]和res通过串口输出到电脑的串口助手,串口助手一直在接受空信息,res竟然也什么都没读到?已经进入接收中断为什么res啥也没读到呢?
我觉得是我接收函数写的不对吧,请问应该怎么写,求给个思路。
Mini板发送端。用的是串口通信的例程,usart.c和usart.h用不上,所以没动。
test.c int main(void) { int i=0; u8 b[3]; //自己定义的数组 Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口初始化为9600 LED_Init(); //初始化与LED连接的硬件接口 b[0]='a'; b[1]='b'; b[2]='c'; for(i=0;i<1;i++) //只发送一个a就行 { USART1->DR=b; //发送 while((USART1->SR&0X80)==0); //等待发送结束 while((USART1->SR&0X40)==0); } //等待发送结束 while(1){ } } 核心板接收端。 usart.h extern u8 b[2]; // 自定义了一个数组,但没什么用···· usart.c #include "led.h" #include "delay.h" ········· u8 b[2]; void USART1_IRQHandler(void) { u8 res=0; #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS. OSIntEnter(); #endif if(USART1->SR&(1<<5)) //接收到数据 { res=USART1->DR; b[0]=res; if(b[0]!='a') { LED0=0; //接收到数据a 就亮灯 LED1=0; //接收到数据a 就亮灯 delay_ms(1000); } } test.c int main(void) { u16 t; u16 len; u16 i; u16 times=0; Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,9600); //串口初始化为115200 delay_init(72); //延时初始化 LED_Init(); //初始化与LED连接的硬件接口 LED0=1; LED1=1; while(1) { LED0=0; LED1=0; delay_ms(200); LED0=1; LED1=1; delay_ms(200) } } |