单片机学习小组
直播中

李雪

7年用户 949经验值
私信 关注

STM32F334的编程直接写寄存器就怎么也不成功是为什么?

STM32F334的编程直接写寄存器就怎么也不成功是为什么?

回帖(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"的要求。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分