硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1145|回复: 5
收起左侧

[有问必答] 仿真使用USART_ClearFlag()函数清TC位差异,求解答。

[复制链接]

3

主题

28

回帖

37

积分

新手上路

积分
37
发表于 2024-11-27 10:18:13 | 显示全部楼层 |阅读模式
在下使用STM32F4,使用标准库,串口在初始化时,使用USART_ClearFlag()函数清除USART_FLAG_TC标志位,仿真全速时,TC清不了;使用单步仿真时,TC清了。请问怎样解析这样情况?


全速运行初始化后,TC标志清不了。
00001.PNG

单步调试入去到USART_ClearFlag(),TC标志清了。
00002.PNG




回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-11-27 11:04:14 | 显示全部楼层
这个没关系,也有可能是调试仿真的问题。

当前主要一点是不使用 仿真,正常上电后,使用正常不,这个正常就没关系。
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2024-11-28 09:31:31 | 显示全部楼层
eric2013 发表于 2024-11-27 11:04
这个没关系,也有可能是调试仿真的问题。

当前主要一点是不使用 仿真,正常上电后,使用正常不,这个正 ...

上层任务发送数据时,先检查串口上一次发送是否完成(即是检查这个TC完成标志)。初始化串口时清这个TC标志,没有清成功反而让上层发送数据检测TC完成标志逻辑正常。单步仿真时,TC标志清了,上层发送数据一直检测不到TC完成标志(初始化时清了,一直没发数据,这个TC标志位一直为0),造成发不到数据。现在逻辑改为串口初始化时不清TC标志,每次发送数据时先清TC标志,再发数据。
回复

使用道具 举报

102

主题

573

回帖

894

积分

金牌会员

积分
894
QQ
发表于 2024-11-28 10:07:21 | 显示全部楼层
mypear 发表于 2024-11-28 09:31
上层任务发送数据时,先检查串口上一次发送是否完成(即是检查这个TC完成标志)。初始化串口时清这个TC标 ...

可以参考硬汉哥的代码,用寄存器写的串口驱动(bsp_uart_fifo.c)。
硬汉哥那个驱动很好用,已经很稳定了。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-12-2 20:40:22 | 显示全部楼层
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));

  /* The CTS flag is not available for UART4 and UART5 */
  if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
  {
    assert_param(IS_USART_1236_PERIPH(USARTx));
  }
      
  USARTx->SR = (uint16_t)~USART_FLAG;
}清零
这个函数是写0 清零(应用于双缓冲模式)                 TC清零最好是读SR寄存器  然后写DR   
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2024-12-12 10:19:59 | 显示全部楼层
diego2003 发表于 2024-12-2 20:40
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
  /* Check the parameters */

实测串口初始化后紧跟清TC标志是失败的,要延时大于10毫秒才清成功。之前抄例程是说小缺陷,要清TC标志,否则第一个字节无法正确发送出去是不是不是这个问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 02:46 , Processed in 0.044791 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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