设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4321|回复: 0
打印 上一主题 下一主题

UART SR寄存器清除问题

[复制链接]

1

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
跳转到指定楼层
楼主
kevicki 发表于 2015-11-28 00:37:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

Archiver|手机版|小黑屋|Comsenz Inc.   

GMT+8, 2024-5-2 20:14 , Processed in 0.115328 second(s), 30 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表