打印
[STM8]

STM8的串口调试怎么这么不稳定?请高手帮助下,谢谢~~

[复制链接]
2410|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
autooy|  楼主 | 2014-5-13 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 autooy 于 2014-5-13 20:19 编辑

我开始调试好,使用57600的波特率,内部晶振,还可以通信,偶尔可以,偶尔不可以,这个可以理解,因为是内部晶振,于是,我就将晶振调整到外部11059200hz,结果索性通信不上,请高手帮助:
芯片型号:STM8S105S4T6C
1、时钟切换:
void init_time(void)
{
        
   CLK_ECKR = 0X01;   //允许外部高速振荡器工作
    while((CLK_ECKR & 0x02) == 0x00);  //等待外部高速振荡器准备好
   
    CLK_SWCR = CLK_SWCR|0X02;     //使能切换
    CLK_SWR = 0XB4;                //选择芯片外部的高速振荡器为主时钟
    while((CLK_SWCR&0X08));        //等待切换成功
    CLK_SWCR = CLK_SWCR&0XFD;     //清除切换标志
}

2、串口初始化:
                //开UART2时钟
                CLK_PCKENR1 |= SETBIT3;
                //禁止收发
                UART2_CR2 &= CLRBIT2;
                UART2_CR2 &= CLRBIT3;
                //波特率设定 主时钟为HSI-11.0592M
                UART2_BRR2 = 00;//对应11.0592Mhz 11059200/57600=192=0X00C0
                UART2_BRR1 = 0C;
                //8位数据位 1位起始位 1位停止位 无校验
                UART2_CR1 &= CLRBIT4;
                UART2_CR3 &= CLRBIT4;
                UART2_CR3 &= CLRBIT5;
                UART2_CR1 &= CLRBIT2;
                //关闭发送中断
                UART2_CR2 &= CLRBIT6;
                //允许接收中断
          UART2_CR2 |= SETBIT5;
                //使能UART
                UART2_CR1 &= CLRBIT5;
                //启动收发
                UART2_CR2 |= SETBIT2;
                UART2_CR2 |= SETBIT3;
3、发送:
void UART2_SendChar(uchar ch)
{
PD_ODR |= SETBIT7;                        //设置为发送模式
while((UART2_SR & 0x80) == 0x00);// 若发送寄存器不空,则等待
UART2_DR = ch; // 将要发送的字符送到数据寄存器
PD_ODR &= CLRBIT7;                        //默认为接收模式
}
其中PD7为485的控制脚;

4、 引脚配置;
   PD_DDR = 0XBC;
   PD_CR1 = 0XBC;
   PD_CR2 = 0X00;
5、在主函数里调用发送字符函数,根本发送不出去!请高手帮助下;
沙发
icecut| | 2014-5-13 21:08 | 只看该作者
直接上示波器,波特率对不对不就很清楚了么

使用特权

评论回复
板凳
mmuuss586| | 2014-5-14 02:58 | 只看该作者
发送不出去?一直在发送程序的while中等待吗?是的话,初始化时清相关寄存器看看,否按楼上意思拿示波器看看

使用特权

评论回复
地板
outstanding| | 2014-5-14 08:55 | 只看该作者
用示波器吧

使用特权

评论回复
5
戈卫东| | 2014-5-14 10:21 | 只看该作者
你的485控制有问题。
你不应该写完了DR就立即切换到接收模式,这个时候发送可能还没有开始,切到接收模式那么发送的信号不会出现在485总线上。

使用特权

评论回复
6
戈卫东| | 2014-5-14 10:22 | 只看该作者
我想可以有两个选择,一是延时足够时间保证发送完成再切换模式,另一是等待那个TC信号。

使用特权

评论回复
7
autooy|  楼主 | 2014-5-14 12:27 | 只看该作者
就如5楼的戈兄说的一样,确实是485切换问题造成的,感谢各位朋友。

使用特权

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

本版积分规则

337

主题

684

帖子

8

粉丝