采用cs中断的方式接收spi的数据,第一次能成功接收,后面一直都是spi busy
这是我的代码
#include <stm32f4xx_hal.h>
#include <rtthread.h>
#include <rtdevice.h>
extern SPI_HandleTypeDef hspi1;
#define CS_PIN 4 //__STM32_PIN(4 , A, 4 ),
#define LEN 16
uint8_t rx_data[LEN] = {0};
uint8_t tx_data[LEN] = {'1', '2', '3', '4', '5', '6', '7', '8', '1', '2', '3', '4', '5', 'e', 'n', 'd'};
void on_cs_falling(void *args)
{
//rt_thread_mdelay(5);
while (HAL_SPI_GetState(&hspi1)!=HAL_SPI_STATE_READY);
HAL_StatusTypeDef ret = HAL_SPI_TransmitReceive_DMA(&hspi1, tx_data, rx_data, LEN);
rt_kprintf("on_cs_falling. HAL_SPI_TransmitReceive_DMA ret=%d recv=%s!\n", ret, rx_data);
}
void cs_pin_init()
{
rt_pin_mode(CS_PIN, PIN_MODE_INPUT_PULLUP);
rt_pin_attach_irq(CS_PIN, PIN_IRQ_MODE_FALLING, on_cs_falling, RT_NULL);
rt_pin_irq_enable(CS_PIN, PIN_IRQ_ENABLE);
}
/* 导出到自动初始化 */
INIT_COMPONENT_EXPORT(cs_pin_init);
请问怎么解决
请问如何重置DMA?
我是新手
请问如何看接收了多少数据?
这块你看芯片例程研究下,一般是先把DMA停下来,然后重配一次即可。
一般是看DMA的当前数据指针,减去配置时的地址,就得到DMA传输了多少数据。
谢谢
能给个实例吗,调试了很久,还是没有搞好,原谅我是新手
@how0723 没有做过stm32的,只在项目中用过,代码耦合太强,拆不开。
做从机还得配合一个通讯协议,这块你可以参考下RW007的协议。
谢谢