kevicki 发表于 2015-11-28 00:37:21

UART SR寄存器清除问题

STM8S207RB开发板,用库函数。
设置了UART1的TC中断,发现没有发送数据也会不断的进入中断,定位到SR寄存器中TC位默认值就为1,所以导致不断进入TC中断。按照手册说明,TC flag can be also cleared by software sequence: a read operationto UART1_SR register (UART1_GetFlagStatus()) followed by a write operation to UART1_DR register (UART1_SendData8() or UART1_SendData9())(如下图为UART1_ClearFlag函数的注释对TC位清除方法的说明)


于是按照此方法写出UART1初始化函数:
void UART_init() {
        /*复位默认设置*/
        UART1_DeInit();
        /*初始化UART1,波特率115200, 字长8位,停止位1位,发送接收使能*/
        UART1_Init((u32) 115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1,
                        UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE,
                        UART1_MODE_TXRX_ENABLE);

        /*UART_SR寄存器初始化复位时TC、TXE两位默认为1,会影响到发送中断使能,使用软件方法清除*/
        UART1_GetFlagStatus(UART1_FLAG_TC);
        UART1_SendData8('1');

        /*设置接收中断、发送完成中断*/
        UART1_ITConfig(UART1_IT_RXNE, ENABLE);
        UART1_ITConfig(UART1_IT_TC, ENABLE);

        /*使能UART1口*/
        UART1_Cmd(ENABLE);
}


但是问题来了:UART1的SR寄存器中的TC位依然没有清除,还是1,导致TC中断依旧不断进入,如下图:

请教一下大神们这是怎么回事呢??

另外,如果直接对寄存器操作,教程中样例里面UART1_SR这种变量是在哪个头文件中呢?我include了"iostm8s207rb.h",但是里面并没有定义此变量。

多谢了~~~

页: [1]
查看完整版本: UART SR寄存器清除问题