单片机学习小组
登录
直播中
李雪
7年用户
949经验值
私信
关注
STM32F334的编程直接写寄存器就怎么也不成功是为什么?
开启该帖子的消息推送
编程
STM32
F334的编程直接写寄存器就怎么也不成功是为什么?
回帖
(1)
张颖
2022-2-17 09:27:21
最近在学习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"的要求。
最近在学习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"的要求。
举报
更多回帖
rotate(-90deg);
回复
相关问答
编程
用
直接
操作
寄存器
的方式
写
程序,移植STemWin
不成功
2019-03-12
1560
STM32F334
比较
器
消隐和HRTIM的事件消隐功能如何实现?
2024-06-04
374
请问
STM32F334
能测量负信号吗?
2019-02-25
3344
怎样使用
stm32f334
的Hrtim定时
器
去创建多路互补pwm波呢
2021-10-19
2043
普中
STM32
开发板的
F
103总是烧
写
不成功
是为什么?
2022-02-10
1675
AD7779 SPI模式
写
寄存器
失败是什么原因引起的?
2023-12-06
256
请问
stm32f334
的高精度定时
器
如何配置?
2019-03-22
4211
为什么
STM32F334
HRTIM定时
器
有最小比较值和重装载值?
2023-08-04
279
AD7177能正确读出ID,但设置ADMODE
寄存器
不成功
的原因?
2023-12-11
250
STM32F334
HRTIM无法输出PWM是怎么回事?
2024-03-22
224
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分