|
刚开始学习UART这部分内容,我的串口怎么也不能接收数据,只好把函数梳理一遍看哪里问题,对HAL库函数发现许多不解的地方。
如上图所示:
在HAL_UART_Init()函数中,
1、huart->gState == HAL_UART_STATE_RESET时,调用HAL_UART_MspInit(),初始化GPIO、RCC、NVIC等底层。
这里的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呢?
为什么这样?
请懂的大神帮忙解惑!!!! |
|