int main(void)
{
u8 t;
u8 len;
delay_init(); //=====延时函数初始化
NVIC_Configuration(); //=====中断优先级分组
uart1_init(9600); //=====串口1初始化
uart3_init(115200); //=====串口3初始化即蓝牙初始化
delay_ms(100);
LED_Init(); //=====初始化与 LED 连接的IO
KEY_Init(); //=====按键初始化
OLED_Init(); //=====OLED初始化
OLED_Clear(); //=====OLED清屏
while(1)
{
delay_ms(50); //=====50ms刷一次屏幕,频率就是20HZ,不需要一直刷。
OLED_ShowString(0,2,"Bluetooth_Test",12);
OLED_ShowString(0,4,"Recieve:",12);
//USART_SendData(USART3,recieve_bluetooth_DATA);
if(USART3_RX_STA&0x8000)
{
len=USART3_RX_STA&0x3fff;//得到此次接收到的数据长度
Uart3SendStr("\r\n您发送的消息为:\r\n");
for(t=0;t<len;t )
{
USART3->DR=USART3_RX_BUF[t];
while((USART3->SR&0X40)==0);//等待发送结束
}
Uart3SendStr("\r\n");//插入换行
USART3_RX_STA=0;
}
OLED_ShowString(50,4,USART3_RX_BUF,12);
LED=~LED; //表明程序一直处于运行?
}
}
遇到的问题【BUG】
1)每次串口3只可以打印两个字节
原来是:
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
改为:
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
解决方法:
1.提升串口的接收的优先级,让其先执行;
2.删除中断函数的printf语句,可能是超时导致的
3.尽量不要在中断函数中进行接发操作,在中断函数中将数据存储起来便可以。
效果图: