april1818 发表于 2017-11-17 18:00:08

SPI做从设备 HAL_TransmitReceive_IT的使用

我用的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: MasterPA4-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);                 }}




无薪税绵 发表于 2018-2-22 10:30:33

1、NSS 硬件输入:主机接高电平,从机接低电平。
2、第二个问题,请参考 http://www.eemaker.com/stm32-hal-spijsysh.html
3、调试模式下,查看SPI的状态是不准确的,一定要连续运行,再从串口打印出来才准确的。

再给一个参考:利用STM32CubeMX生成SPI查询代码
http://www.cnblogs.com/libra13179/p/6911687.html

黑皮男 发表于 2018-2-22 11:27:21

签到

wolfgang2015 发表于 2018-2-22 12:21:01

1. STM32的NSS 硬件模式
    意思是 主从设备SPI设置好以后 当数据准备好 调用发送接收函数的时候 NSS会硬件自动拉低么

>>>>发送时会的。

2. HAL_TransmitReceive_IT 函数是怎么工作的
    当数据准备好 就会进入中断 执行发送接收么

    需要对传输接收中断相关HAL中断状态进行封装,打开这函数你就知道,看看具体的这仅仅是个传送命令,当然在前后需要有中断状态值的判断。

3. 在debug模式下 可以看到 HAL_TransmitReceive_IT 里 SPI的状态是busy 我附上我的程序 希望大家帮我看一下

这个你要看看HAL_SPI_Receive_IT、HAL_Transmit_IT 是如何封装的,可以参考一下
页: [1]
查看完整版本: SPI做从设备 HAL_TransmitReceive_IT的使用