完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
调试 LIS3DH这个3轴加速度传感器,用spi读取数据。移植官方的驱动,关键要实现 u8_t LIS3DH_ReadReg(u8_t Reg, u8_t* Data); u8_t LIS3DH_WriteReg(u8_t WriteAddr, u8_t Data); 这两个接口,我的实现如下: u8_t LIS3DH_ReadReg(u8_t Reg, u8_t* Data) { //To be completed with either I2c or SPI reading function //i.e. *Data = SPI_Mems_Read_Reg( Reg ); HAL_StatusTypeDef ret; u8_t read_set; read_set = (Reg | 0x80); /* LOW */ SPI_CS_RESET(); ret = HAL_SPI_Transmit(&hspi1, &read_set, sizeof(u8_t), 1000); if(ret != HAL_OK) { return 0; } ret = HAL_SPI_Transmit(&hspi1, 0, sizeof(u8_t), 100); ret = HAL_SPI_Receive(&hspi1, (u8_t*)Data, sizeof(u8_t), 1000); if(ret != HAL_OK) { return 0; } /* HIGH */ SPI_CS_SET(); HAL_Delay(2); return 1; } 关键在于,传感器多次中断以后,HAL_SPI_Transmit这个函数就挂掉了,一直返回 HAL_busy,具体一看是 hspi->State 这个状态不对, 打印出来发现状态值不属于这个枚举之一,是一个乱七八糟的值,每次还不一样? typedef enum { HAL_SPI_STATE_RESET = 0x00U, /*!< SPI not yet initialized or disabled */ HAL_SPI_STATE_READY = 0x01U, /*!< SPI initialized and ready for use */ HAL_SPI_STATE_BUSY = 0x02U, /*!< SPI process is ongoing */ HAL_SPI_STATE_BUSY_TX = 0x12U, /*!< Data Transmission process is ongoing */ HAL_SPI_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ HAL_SPI_STATE_BUSY_TX_RX = 0x32U, /*!< Data Transmission and Reception process is ongoing */ HAL_SPI_STATE_ERROR = 0x03U /*!< SPI error state */ }HAL_SPI_StateTypeDef; 关键,HAL-busy 以后就再也不会ready了,因此中断再进来,也无法读取成功。。 求大神解答啊 |
|
相关推荐
6个回答
|
|
帮顶!~~
|
|
|
|
这个[size=13.3333px]好像是浮点小数,SPI如何传输浮点小数?
|
|
|
|
不会,绑顶
|
|
|
|
没有用过,只能帮顶了。
|
|
|
|
|
|
帮顶,请问解决了吗?我也遇到了同样的问题
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1248 浏览 1 评论
973 浏览 1 评论
MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记
625 浏览 0 评论
自定义系统时钟频率后,用库函数和微带两种方式点亮LED灯,为什么灯的闪烁频率不一致?
1536 浏览 2 评论
1759 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 07:51 , Processed in 1.371208 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号