求教:protues8.0+vsdp+串口除錯助手,STM32只能正常接收第一個資料
在protues中添加STM32F103R6芯片、添加COMPIM串口、LED顯示燈。使用U5撰寫串口通信程式,將撰寫好的程式下載到protues中,時鐘均設定為8M,串口波特率設定為9600。開始模擬后,可以收到串口發送的資料,但是發送串口資料給STM32后,再將資料再發送,只有第一位資料是正確的。
一、Protues配置
Protues8.0。

芯片選擇STM32103R6,晶振選擇8M,COMPIM波特率選擇9600,D1為發送資料時閃爍,D2上電點亮,接收資料后滅。
二、程式
1.串口中斷程式
代碼如下(示例):
void USART1_IRQHandler(void) //串口1中斷服務程式
{
u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷(接收到的資料必須是0x0d 0x0a結尾)
{
Res =USART_ReceiveData(USART1); //讀取接收到的資料
USART_RX_BUF[USART_RX_STA]=Res ;
USART_RX_STA++;
if(USART_GetITStatus(USART1, USART_IT_RXNE) == RESET)
{
bj=1;LED1=1;return;
}
Res=0;
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntExit();
#endif
}
#endif
判斷串口有接收標志,接收資料,當沒有接收標志時候跳出串口中斷,并bj=1(標記位置1)。
注:根據正點原子函式庫修改的,USART_RX_STA第15位無法置位,測驗時候發現if(Res!=0x0a)這個判斷無法成功。
2.主函式接收發送資料
while(1)
{
if(bj==1)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的資料長度
printf("\r\n您發送的訊息為:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1發送資料
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發送結束
}
printf("\r\n\r\n");//插入換行
printf("%c",USART_RX_BUF[0]); //發送收到的第1個資料
printf("\r\n\r\n");//插入換行
printf("%c",USART_RX_BUF[1]); //發送收到的第2個資料
printf("\r\n\r\n");//插入換行
printf("%c",USART_RX_BUF[2]); //發送收到的第3個資料
printf("\r\n\r\n");//插入換行
printf("%c",USART_RX_BUF[3]); //發送收到的第4個資料
printf("\r\n\r\n");//插入換行
printf("%d",USART_RX_STA); //發送收到了幾個資料(計數從0開始,實際資料-1)
printf("\r\n\r\n");//插入換行
bj=0; //發送結束,標記為清零
USART_RX_STA=0; //計數器清零
}else
{
times++;
if(times%5000==0)
{
printf("\r\n精英STM32開發板 串口實驗\r\n");
printf("正點原子@ALIENTEK\r\n\r\n");
}
if(times%200==0)printf("請輸入資料,以回車鍵結束\n");
if(times%30==0)LED0=!LED0;//閃爍LED,提示系統正在運行.
delay_ms(10);
}
3.串口資料顯示結果


收到資料后再發送,只有第一位資料正確,資料量正確,不知道為什么,問正點原子的客服也不知道為什么。
求大神解答。
————————————————
著作權宣告:本文為CSDN博主「紫辰風鈴」的原創文章,遵循CC 4.0 BY-SA著作權協議,轉載請附上原文出處鏈接及本宣告。
原文鏈接:https://blog.csdn.net/weixin_55781693/article/details/114534737
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267589.html
標籤:單片機/工控
上一篇:keil5
