打印
[STM8]

请教STM8L052c6的串口中断接收问题

[复制链接]
801|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
尛舞icc|  楼主 | 2017-6-19 08:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 尛舞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;
                }
}
沙发
尛舞icc|  楼主 | 2017-6-23 15:03 | 只看该作者
没人知道吗?  看来要换芯片了

使用特权

评论回复
板凳
xmshao| | 2017-6-23 16:24 | 只看该作者
本帖最后由 xmshao 于 2017-6-23 16:28 编辑

这些基于寄存器的配置只能靠自己对着手册确认;
对于8L系列,外设默认是关闭的,记得要开启;注意波特率要配置正确;
你说的发送可以,仅指可以发送 ,还是说还可以进入发送中断?
你的中断服务程序跟 interrupt_vector const _vectab[] = {。。。的要一致;

stm8L的标准外设库里也有相关工程,可以参考下;

使用特权

评论回复
地板
yiyigirl2014| | 2017-6-23 18:48 | 只看该作者
这个芯片有库函数吗,没有用过8的,32的都是有库函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

230

帖子

2

粉丝