ST意法半导体
直播中

早知

9年用户 1195经验值
擅长:光电显示 存储技术
私信 关注
[问答]

STM32F411RE为什么会出现pData指针增长到2U的情况?

我是新人,正在学习核子板单片机STM32F411RE的UART数据传输。我已阅读并理解函数 HAL_UART_Transmit。但是,在这个函数中,有一部分我不明白。我不明白下面程序的含义:
如果(huart->Init.WordLength == UART_WORDLENGTH_9B
     {
       如果(UART_WaitOnFlagUntilTimeout(huart,UART_FLAG_TXE,RESET,tickstart,超时)!= HAL_OK
       {
         返回HAL_TIMEOUT
       }
       tmp = (uint16_t *) pData;
       huart->Instance->DR = (*tmp & (uint16_t)0x01FF);
       如果 (huart->Init.Parity == UART_PARITY_NONE)
       {
         pData += 2U;
       }
       别的
       {
         pData += 1U;
       }
     }
在9-Bit帧模式下,为什么每次从pData指针到DR寄存器赋值后:
- pData += 2U 如果奇偶校验 = PARITY_NONE
- pData += 1U 如果奇偶校验!= PARITY_NONE
据我了解,在:   tmp = (uint16_t *) pData;之后
                                             huart->Instance->DR = (*tmp & (uint16_t)0x01FF);
然后指针会加1,将下一个内存区域分配给DR。那么为什么会出现pData指针增长到2U的情况。如果是这样,是否有可能传输的数据是错误的?
希望大家能够解答。谢谢你。








回帖(1)

李秀云

2023-1-4 12:04:32
如果您要发送 9 位数据,则必须将每个值存储在一个占用 2 个字节的 uint16_t 中。由于 pData 是 uint8_t* 类型,为了将其递增到下一个值,指针必须增加 2。
如果您发送 9 位,但其中只有 8 位是数据,1 位是奇偶校验位,则数据适合一个字节的 uint8_t。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分