完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我是新人,正在学习核子板单片机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个回答
|
|
如果您要发送 9 位数据,则必须将每个值存储在一个占用 2 个字节的 uint16_t 中。由于 pData 是 uint8_t* 类型,为了将其递增到下一个值,指针必须增加 2。
如果您发送 9 位,但其中只有 8 位是数据,1 位是奇偶校验位,则数据适合一个字节的 uint8_t。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2906 浏览 1 评论
3290 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1873 浏览 1 评论
3725 浏览 6 评论
6134 浏览 21 评论
STM32G070 UART串口,低波特率传送数据时,TIMER出现严重延时现象如何解决?
24浏览 4评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
12浏览 4评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
10浏览 4评论
4浏览 4评论
stm32mp135使用官方SDK交叉编译工具链,编译的时候却找不到头文件怎么解决?
12浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-10 18:35 , Processed in 0.691616 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191