|
10黑幣
程序在調試狀態一步一步執行發送字符串都能正常的發送,但全速運行時發送1和0以外的字符時,就出現錯誤了
求求大佬幫忙找找原因 或者給個解決思路 不勝感激
#include <stm8l15x.h>
#include "led.h"
#include "delay.h"
#include "scip.h"
char REData;
void main()
{
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
LED_Init();
USART1_Init(9600);
while(1);
}
INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler,28)
{
u8 i;
u8 str[6]={69,82,82,79,82,0};
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) //判斷是否接收到數據
{
REData=USART_ReceiveData8(USART1); //接收USART1的數據
if(REData=='0'||REData=='1')
{
USART_SendData8(USART1,REData); //將接收到的數據發送出去 }
else
{
for(i=0;i<6;i++)
{
USART_SendData8(USART1,str[i]); //錯誤
}
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中斷標志位
}
}
//串口初始化配置
#include <stm8l15x.h>
#include "scip.h"
void USART1_Init(u16 BaudRate)
{
disableInterrupts(); //關閉系統總中斷
CLK_PeripheralClockConfig(CLK_Peripheral_USART1,ENABLE);
USART_Init(USART1,BaudRate,USART_WordLength_8b,USART_StopBits_1 ,USART_Parity_No,(USART_Mode_Rx |USART_Mode_Tx));
USART_ITConfig(USART1, USART_IT_RXNE , ENABLE);
USART_Cmd(USART1,ENABLE);
enableInterrupts(); //使能系統總中斷
}
|
-
錯.png
(40.49 KB, 下載次數: 101)
下載附件
2020-9-6 20:32 上傳
全速運行
-
對.png
(46.64 KB, 下載次數: 107)
下載附件
2020-9-6 20:32 上傳
單步運行
最佳答案
查看完整內容
1、使用單片機串口往上發送數據時,一定要檢測與發送相關的標志位,比如TXE(發送數據寄存器空)、TC(發送完成)等,若不檢測等待這些標志位,連續發送時就會出現問題;
2、所以,若單片機串口間隔較長時間發送單字節,是不會有啥問題的,比如你這段響應‘0’和‘1’的程序;
if(REData=='0'||REData=='1')
{
USART_SendData8(USART1,REData); //將接收到的數據發送出去
}
3、但是連續發送時就會 ...
|