|
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)
全速运行
-
对.png
(46.64 KB, 下载次数: 107)
单步运行
最佳答案
查看完整内容
1、使用单片机串口往上发送数据时,一定要检测与发送相关的标志位,比如TXE(发送数据寄存器空)、TC(发送完成)等,若不检测等待这些标志位,连续发送时就会出现问题;
2、所以,若单片机串口间隔较长时间发送单字节,是不会有啥问题的,比如你这段响应‘0’和‘1’的程序;
if(REData=='0'||REData=='1')
{
USART_SendData8(USART1,REData); //将接收到的数据发送出去
}
3、但是连续发送时就会 ...
|