本帖最后由 尛舞icc 于 2017-6-19 08:49 编辑
如题:STM8L052C6的串口中断接收不了,发送可以,接收不行,中断都进不去,求高手指点 急!!!在线等!
附上代码:
void gpio_init(void) //端口初始化
{
//未使用的端口全部设置成推挽输出 2M摆率
PC_DDR&=~(1<<2); //RX上拉输入
// PC_CR1|=1<<2;
// PC_CR2&=~(1<<2);
PC_DDR|=1<<3; //TX推挽输出高电平
// PC_CR1|=1<<3;
//PC_CR2|=1<<3;
//PC_ODR|=1<<3;
}
void clock_init(void)//时钟初始化
{
CLK_SWR=0x01; //选择内部HSI RC震荡
CLK_CKDIVR=0x02;//内部高速时钟4分频,系统时钟为4M
CLK_ECKCR|=1<<2;//开启外部低速时钟
while(!(CLK_ECKCR&0X08));//判断外部低速时钟是否已准备
CLK_PCKENR2|=1<<3|1<<2|1<<1|1<<0;//开启外部设备时钟:LCD,RTC,TIM1,ADC
CLK_PCKENR1|=1<<5; //USART1时钟开启
while(CLK_CRTCR&0X01);
CLK_CRTCR|=1<<4;//外部低速时钟作为RTC时钟32.768KHZ
while(CLK_CRTCR&0X01);//RTC是否准备就绪
CFG_GCR|=1<<0;//SWIM作为普通输出I/O口
delayms(100);
}
void uart1_init(void) //串口初始化 4800波特率
{
SYSCFG_RMPCR1 &=~(1<<5|1<<4); //00:USART1_TX on PC3 and USART1_RX on PC2 该句可省略 初始化00
//SYSCFG_RMPCR1 |=1<<4; //01: USART1_TX on PA2 and USART1_RX on PA3
USART1_CR1=0;
USART1_CR2=0;
USART1_CR3=0;
///////////////////波特率计算
USART1_BRR2=0x01; //4M fmaster/4800 ≈833.3=833 =0x0341 高4 低4
USART1_BRR1=0x34; //中间8位
///////////////////////////////
USART1_CR2|=1<<2; //允许接收
USART1_CR2|=1<<3; //允许发送
USART1_CR2|=1<<5; //开接收中
}
void UART1_send_data82(unsigned char Data) //串口发
{
while((USART1_SR & 0x80)==0x00); //等待 发送完成
USART1_DR=Data;
}
@far @interrupt void USART1_interrupt (void) //串口中断 接收中断
{
rx_flag=1;//测试有无进中断
rcv_cod[0]=USART1_DR;
if(rcv_cod[0]=0x01)
{
rx_flag=2;
}
} |