|
10黑幣
程序在調(diào)試狀態(tài)一步一步執(zhí)行發(fā)送字符串都能正常的發(fā)送,但全速運(yùn)行時(shí)發(fā)送1和0以外的字符時(shí),就出現(xiàn)錯(cuò)誤了
求求大佬幫忙找找原因 或者給個(gè)解決思路 不勝感激
#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) //判斷是否接收到數(shù)據(jù)
{
REData=USART_ReceiveData8(USART1); //接收USART1的數(shù)據(jù)
if(REData=='0'||REData=='1')
{
USART_SendData8(USART1,REData); //將接收到的數(shù)據(jù)發(fā)送出去 }
else
{
for(i=0;i<6;i++)
{
USART_SendData8(USART1,str[i]); //錯(cuò)誤
}
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中斷標(biāo)志位
}
}
//串口初始化配置
#include <stm8l15x.h>
#include "scip.h"
void USART1_Init(u16 BaudRate)
{
disableInterrupts(); //關(guān)閉系統(tǒng)總中斷
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(); //使能系統(tǒng)總中斷
}
|
-
錯(cuò).png
(40.49 KB, 下載次數(shù): 101)
下載附件
2020-9-6 20:32 上傳
全速運(yùn)行
-
對(duì).png
(46.64 KB, 下載次數(shù): 107)
下載附件
2020-9-6 20:32 上傳
單步運(yùn)行
最佳答案
查看完整內(nèi)容
1、使用單片機(jī)串口往上發(fā)送數(shù)據(jù)時(shí),一定要檢測(cè)與發(fā)送相關(guān)的標(biāo)志位,比如TXE(發(fā)送數(shù)據(jù)寄存器空)、TC(發(fā)送完成)等,若不檢測(cè)等待這些標(biāo)志位,連續(xù)發(fā)送時(shí)就會(huì)出現(xiàn)問(wèn)題;
2、所以,若單片機(jī)串口間隔較長(zhǎng)時(shí)間發(fā)送單字節(jié),是不會(huì)有啥問(wèn)題的,比如你這段響應(yīng)‘0’和‘1’的程序;
if(REData=='0'||REData=='1')
{
USART_SendData8(USART1,REData); //將接收到的數(shù)據(jù)發(fā)送出去
}
3、但是連續(xù)發(fā)送時(shí)就會(huì) ...
|