本帖最后由 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、在主函数里调用发送字符函数,根本发送不出去!请高手帮助下; |