|
STM8S207RB开发板,用库函数。
设置了UART1的TC中断,发现没有发送数据也会不断的进入中断,定位到SR寄存器中TC位默认值就为1,所以导致不断进入TC中断。按照手册说明,TC flag can be also cleared by software sequence: a read operation to 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",但是里面并没有定义此变量。
多谢了~~~
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|