完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
最近在学习STM32F334的编程,在编写用SPI驱动LCD液晶屏时有一个奇怪的问题,采用HAL库中的函数就正常显示
HAL_SPI_Transmit(&hspi1, &dat, 1, 10); 直接写寄存器就怎么也不成功。 while (__HAL_SPI_GET_FLAG(&hspi1, SPI_FLAG_TXE)==0); hspi1.Instance->DR=dat; 百思不得其解,然后看数据手册,发现有这一段: 就是说如果传输的字节刚好是1个的话,SPI就自动进行“打包传输”,就是一次传输2个字节,如果只想传输单个字节的话,就只能向寄存器写入一个字。 这样的操作是不行的: hspi1.Instance->DR=dat; 虽然dat的类型是uint8_t, 但在赋值时被自动转为uint16_t, 这样本来只想发送一个字节的,变成了发送两个字节,当然会出错。 正确的赋值方法: *((__IO uint8_t *)&hspi1.Instance->DR)=dat; 刚开始在库函数中看到这样的赋值方法不理解,看了数据表后才明白,这是强制把DR寄存器的指针类型改为uint8_t, 达到“8 bits access"的要求。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
1599 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4738 浏览 0 评论
4229 浏览 9 评论
3822 浏览 16 评论
4398 浏览 1 评论
4206浏览 3评论
2378浏览 0评论
3392浏览 0评论
1157浏览 0评论
2842浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 15:51 , Processed in 0.919218 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1755