OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5696|回复: 1

进行UART初始化时,究竟是LOCK或是UNLOCK?

[复制链接]

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-10-8
在线时间
18 小时
发表于 2021-9-23 13:39:13 | 显示全部楼层 |阅读模式
1金钱
刚买了原子哥767的旗舰开发板,在学习UART这部分内容,有点疑惑请论坛大神帮忙解释下:
在HAL_UART_Init()函数中,
               1、huart->gState == HAL_UART_STATE_RESET时,调用HAL_UART_MspInit(),初始化GPIO、RCC、NVIC等底层。
                    代码如下:
                                       1.png
                      这里的HAL_UNLOCKED是关闭锁机制,分配锁起来的资源进行初始化,不知这个锁起来的资源这里指的是GPIO、RCC、NVIC或是UART?个人感觉似乎是GPIO、RCC、NVIC,
                      但是LOCK是在哪里呢?
               2、调用UART_SetConfig(huart),初始化UART。
                       这里用 huart->gState = HAL_UART_STATE_BUSY;来标识资源状态,说明huart正在进行初始化进程.
               3、调用UART_CheckIdleState(huart),进行初始化后UART空闲状态确认。
                         这里调用UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)来确认TE后,TX中断应答的状态,在这里只有UNLOCK
                         没有LOCK。
                         个人认知,对资源的进程操作,要先开启锁机制,即LOCK独占后,再操作,然后再关闭锁机制,即UNLOCK释放后,资源共享。
      可是看这个初始化函数对UART的初始化进程,似乎没有LOCK,只有UNLOCK呢?
      为什么这样?
      请懂的大神帮忙解惑!!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2021-9-24 00:49:10 | 显示全部楼层
这一般没去关心这玩意。。。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-5 22:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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