void CLK_INIT(void)
{
CLK_CKDIVR = 0x19; /*HSI/8、CPU = 2/2,1M速度*/
CLK_PCKENR1 = 0x04; /*只开启uart1的时钟*/
CLK_PCKENR2 = 0x00; /*打开ADC的时钟*/
}
/***********************************/
//
//
/**********************************/
void IO_INIT(void)
{
PA_CR1 = 0x00; /*推挽输出*/
PA_CR2 = 0x00; /*最大输出为2MHZ,禁止外部中断*/
PA_DDR |= 0x20; /*PA5为输出*/
}
void UART1_INIT(void)
{
UART1_BRR2 = 0x00;
UART1_BRR1 = 0x0d; /*2M的Fmaster下9600的波特率*/
UART1_DR = 0xaa;
UART1_CR2 = 0x08; /*发送完寄存器空,发送使能*/
UART1_CR3 = 0x00; /*1个停止位*/
}
#pragma vector = UART1_T_TXE_vector
__interrupt __root void UART1_TX(void)
{
UART1_SR = 0x00;
UART1_DR = 0xaa;
}
上面是我的初始化和中断函数,在IAR FOR STM8中写的。现在情况是这样的。用STLINK连接三合一小板DEBUG的时候,程序可以进入中断,但是UART1_DR永远都是0x00,不会根据我的需要来改变。这到底是怎么回事啊?
我要疯了,难道就没有一个人是不用库写串口的吗?难道所有的人都是用库的?写过串口通信的人只需要贴上自己的那一段代码给我参考下,就完了嘛,根本不占用你时间的啊!昨晚就想发帖了,结果说11:30后不许发帖。
"UART1_DR永远都是0x00,不会根据我的需要来改变。这到底是怎么回事啊"
你一将数值写入,该值就会备传输到移位寄存器,UART1_DR马上就编程零了,同时发送寄存器为空标志位被置位。
串口是否正常,你使用示波器查看串口的发送引脚是否有信号,就知道你的串口是否正常。
写UART1_DR寄存器操作的是输出数据寄存器,读UART1_DR寄存器操作的是输入数据寄存器。你永远读不到输出数据寄存器的内容,也永远写不了输入数据寄存器。