STM8_2018-03-06.rar
(2.48 MB, 下载次数: 44)
2018-3-21 15:40 上传
点击文件名下载附件
STM8S005 芯片UART2中断接收数据完后不能跳出,一直死循环在中断里面,出现接收过载情况,请大神指点,我把程序贴出来,望大神指教。
void Uart2_Init(void)
{
unsigned int baud_div=0;
baud_div =HSIClockFreq/BaudRate1; /*求出分频因子*/
baud_div =baud_div;
GPIO_Init(EN485_PORTD, TX_PD5, GPIO_MODE_OUT_PP_HIGH_FAST);//发送数据IO
GPIO_Init(EN485_PORTD, RX_PD6, GPIO_MODE_IN_PU_NO_IT);//接受数据IO
GPIO_Init(EN485_PORTD, EN485_PD4, GPIO_MODE_OUT_PP_HIGH_FAST); //EN IO
/*
* 将UART1配置为:
* 波特率 = 115200
* 数据位 = 8
* 1位停止位
* 无校验位
* 使能接收和发送
* 使能接收中断
*/
UART2->SR = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);
UART2->CR1 = (0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);
/*1位起始位 8位数据位 结束位由CR3设置 不使用奇偶校验 不使能奇偶校验中断*/
UART2->CR2 = (0<<7)|(0<<6)|(1<<5)|(0<<4)|(1<<3)|(1<<2);
/*使能发送和接收 接收中断使能 禁止发送中断*/
UART2->CR3 = (0<<6)|(0<<4)|(0<<3); /*设置1位停止位 不使能SCLK*/
UART2->CR5 = (0<<2)|(0<<1);
/*使用智能卡模式需要设置的,基本上保持默认就行了 */
/*设置波特率*/
baud_div =HSIClockFreq/BaudRate1; /*求出分频因子*/
UART2->BRR2 = baud_div & 0x0f;
UART2->BRR2 |= ((baud_div & 0xf000) >> 8);
UART2->BRR1 = ((baud_div & 0x0ff0) >> 4); /*先给BRR2赋值 最后再设置BRR1*/
UART2->CR1 |= (0<<5); /*使能UART*/
GPIO_WriteLow(EN485_PORTD, EN485_PD4); //485接收
//GPIO_WriteHigh(EN485_PORTD, EN485_PD4); //485发送
}
u8 Rev_Data[20];
u8 Rev_Count=0;
u8 Rev_Finish=0;
u8 Rev_Count_Buff;
INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
//UART2_ClearITPendingBit(UART2_FLAG_RXNE); //清中断标志位
//UART2_ClearITPendingBit(UART2_IT_RXNE);
// REV=UART2->SR;
// REV=UART2_ReceiveByte();
REV=UART2_ReceiveData8();
if(REV=='#'){
Rev_Count=0;
}
Rev_Data[Rev_Count] = REV;
Rev_Count++;
if(REV=='*'){
// Rev_Count=0;
Rev_Finish=1; //完成接收,要判断地址和接收数据
Rev_Count_Buff=Rev_Count;
}
if(Rev_Count > 14)
Rev_Count=0;
if(UART2->SR & 0x08){ //读取DR 清除OR
REV=UART2->SR;
REV=UART2->DR;
Rev_Finish=0;
}
UART2_ClearITPendingBit(UART2_IT_RXNE);
}
一周热门 更多>