我用的STM32L476 nucleo board 需要与树莓派通过SPI通讯 。。树莓派是master STM32是从设备 有以下问题想请教一下 1. STM32的NSS 硬件模式 意思是 主从设备SPI设置好以后 当数据准备好 调用发送接收函数的时候 NSS会硬件自动拉低么 2. HAL_TransmitReceive_IT 函数是怎么工作的 当数据准备好 就会进入中断 执行发送接收么 3. 在debug模式下 可以看到 HAL_TransmitReceive_IT 里 SPI的状态是busy 我附上我的程序 希望大家帮我看一下 我添加了一个握手信号 当STM32有数据发送时 先发送一个请求给主设备 出发主设备的中断 主设备中断执行数据接收发送 STM: Slave Pi: Master PA4-SPI1-NSS ------------> CE0PIN_10 PA5-SPI1-SCK ------------->CLKPIN_23 PA6-SPI1-MISO <-----------dataMOSI PIN_19 PA7-SPI1-MOSI ----------->dataMISO PIN_21 PA0-GPIO_Output --------->InterruptPIN_0 附上我的从设备STM32的主程序 都写在了主循环里 /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ GPIO_PinState mybit= HAL_GPIO_ReadPin( GPIOC, GPIO_PIN_13); // Button 蓝色按键 while (mybit==GPIO_PIN_RESET) // 当蓝色按键按下 发送请求给主机 { /*send Interrupt signal to PI 发送请求*/ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); /*data transmit*/ if(HAL_SPI_TransmitReceive_IT(&hspi1,(uint8_t*)aTxBuffer, (uint8_t *)aRxBuffer, 4)!=HAL_OK) { /* Transfer error in transmission process */ Error_Handler(); } HAL_Delay(100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); } } |
2、第二个问题,请参考 http://www.eemaker.com/stm32-hal-spijsysh.html
3、调试模式下,查看SPI的状态是不准确的,一定要连续运行,再从串口打印出来才准确的。
再给一个参考:利用STM32CubeMX生成SPI查询代码
http://www.cnblogs.com/libra13179/p/6911687.html
评分
查看全部评分
评分
查看全部评分
意思是 主从设备SPI设置好以后 当数据准备好 调用发送接收函数的时候 NSS会硬件自动拉低么
>>>>发送时会的。
2. HAL_TransmitReceive_IT 函数是怎么工作的
当数据准备好 就会进入中断 执行发送接收么
需要对传输接收中断相关HAL中断状态进行封装,打开这函数你就知道,看看具体的这仅仅是个传送命令,当然在前后需要有中断状态值的判断。
3. 在debug模式下 可以看到 HAL_TransmitReceive_IT 里 SPI的状态是busy 我附上我的程序 希望大家帮我看一下
这个你要看看HAL_SPI_Receive_IT、HAL_Transmit_IT 是如何封装的,可以参考一下
评分
查看全部评分