完善资料让更多小伙伴认识你,还能领取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"的要求。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:09 , Processed in 1.162711 second(s), Total 49, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号