完善资料让更多小伙伴认识你,还能领取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的选项
2762 浏览 1 评论
3248 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1820 浏览 1 评论
3663 浏览 6 评论
6055 浏览 21 评论
1346浏览 4评论
209浏览 3评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
364浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
458浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
281浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-4 05:52 , Processed in 1.122678 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号