1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
RTThread的spi rt_spi_send_then_recv API 与HAl库的HAL_SPI_TransmitReceive使用是一样的吗 我使用RTTread的spiAPI rt_spi_send_then_recv(ble_spi, &header_master, HEADER_SIZE, &header_slave, HEADER_SIZE);发送一个header,同时收到的回复是:0x04ff030100,即从机芯片的异常返回 将对应的API换成 HAL_SPI_TransmitReceive(&hspi1, header_master, header_slave, HEADER_SIZE, BUS_SPI1_POLL_TIMEOUT);,同时收到的回复是: 0xff09010600, 即正确的数据大小约定包 我的SPI初始化代码如下: /* SPI -----------------------------------------------*/ #define SPI_DEVICE_NAME "spi10" /* SPI 设备名称 */ struct rt_spi_device *ble_spi = RT_NULL; ble_spi = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); if(RT_NULL == ble_spi) { rt_kprintf("Failed to malloc the spi device."); return -RT_ENOMEM; } if (RT_EOK != rt_spi_bus_attach_device(ble_spi, "spi10", "spi1", RT_NULL)) { rt_kprintf("Failed to attach the spi device."); return -RT_ERROR; } /* spi设备配置 */ struct rt_spi_configuration cfg; cfg.data_width = 8; cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_1 | RT_SPI_MSB; // CPOL 0 CPHA 1 cfg.max_hz = 1 * 1000 * 1000; /* 1M */ if (RT_EOK != rt_spi_configure(ble_spi, &cfg)) { rt_kprintf("Failed to config the spi device."); return -RT_ERROR; } 配置的数据位宽 工作模式 和频率应该都是没有问题的(否则应该不能准确收到异常返回0x04ff030100) 我点开rt_spi_send_then_recv 的源码看着好复杂, 这个API在发送的工作上和HAL_SPI_TransmitReceive有什么时序的区别吗 |
|
相关推荐
2个回答
|
|
用错API了 rt_spi_transfer才是同时双工收发
|
|
|
|
*/
/*使用的spi为SPI1,注意SPI的时钟频率不能超过从机芯片的最大频率*/ #include "stm32f4xx_hal.h" #define SPI1_BAUDRATE 8000000 /*SPI1的时钟频率为8MHz*/ SPI_HandleTypeDef hspi1; void SPI1_Init(void) { /*定义SPI初始化结构体*/ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 10; /*使能SPI1*/ __HAL_RCC_SPI1_CLK_ENABLE(); /*初始化SPI1*/ HAL_SPI_Init(&hspi1); } /*使用SPI1发送和接收数据*/ uint8_t SPI1_Send_Recv(uint8_t* txdata, uint8_t* rxdata, uint16_t datalength, uint32_t timeout) { /*发送和接收数据*/ if(HAL_SPI_TransmitReceive(&hspi1, txdata, rxdata, datalength, timeout) == HAL_OK) { return 0; } else { return 1; } } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
590 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2241 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1233 浏览 0 评论
1788 浏览 0 评论
1464 浏览 0 评论
74820 浏览 21 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:32 , Processed in 0.879620 second(s), Total 41, Slave 35 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号