STM32 Hal库SPI中断

SPI从机接受接收中断配置

SPI_HandleTypeDef SPI2_Handler;  //SPI2句柄

uint8_t receive_byte;			  
//SPI口初始化
void SPI2_Init(void)
{
    SPI2_Handler.Instance=SPI2;                         //SPI2
    SPI2_Handler.Init.Mode=SPI_MODE_SLAVE;             //设置SPI工作模式,设置为主模式
    SPI2_Handler.Init.Direction=SPI_DIRECTION_2LINES;   //设置SPI单向或者双向
    SPI2_Handler.Init.DataSize=SPI_DATASIZE_8BIT;       //设置SPI的数据大小
    SPI2_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH;    //串行同步时钟的空闲状态为高电平
    SPI2_Handler.Init.CLKPhase=SPI_PHASE_2EDGE;         //串行同步时钟的第二个跳变沿(
    SPI2_Handler.Init.NSS=SPI_NSS_SOFT;                 //NSS信号由硬件(NSS管脚)
    SPI2_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2;//定义波特率预分频的值
    SPI2_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB;        //指定数据传输从MSB位还是LSB位
    SPI2_Handler.Init.TIMode=SPI_TIMODE_DISABLE;        //关闭TI模式
    SPI2_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//关闭硬件CRC校验
    SPI2_Handler.Init.CRCPolynomial=7;                  //CRC值计算的多项式
    HAL_SPI_Init(&SPI2_Handler);//初始化

    //SPI2_ReadWriteByte(0Xff);                           //启动传输

	HAL_SPI_Receive_IT(&SPI2_Handler, &receive_byte, 1);
	HAL_NVIC_SetPriority(SPI2_IRQn, 2, 0);
	HAL_NVIC_EnableIRQ(SPI2_IRQn);	
	__HAL_SPI_ENABLE(&SPI2_Handler);             //使能SPI
	
}

/**
* @brief This function handles SPI2 global interrupt.
*/
void SPI2_IRQHandler(void)
{
	HAL_SPI_IRQHandler(&SPI2_Handler);
	HAL_SPI_Receive_IT(&SPI2_Handler, &receive_byte, 1);
}

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在配置STM32中断时,首先要使用HAL_SPI_TransmitReceive_IT函数来设置SPI的发送和接收中断功能。这个函数会将指定的发送数据缓冲区和接收数据缓冲区设置为传入的数组,并根据数据的大小选择相应的中断处理函数。如果数据大小大于8位,会选择SPI_2linesRxISR_16BIT和SPI_2linesTxISR_16BIT函数进行中断处理;如果数据大小为8位,则选择SPI_2linesRxISR_8BIT和SPI_2linesTxISR_8BIT函数进行中断处理。然后,使用__HAL_SPI_ENABLE_IT函数使能中断,具体使能的中断包括TXE(发送缓冲区为空中断)、RXNE(接收缓冲区非空中断)和ERR(错误中断)。 在使用SPI进行读写操作时,一般需要先发送读取ID的命令,然后读取返回的ID。这个过程可以通过编写相应的读写操作函数来实现。在函数中,首先需要将片选引脚拉低,然后发送读取ID的命令,并读取返回的ID数据。最后,将片选引脚拉高,完成读取操作。 需要注意的是,重新配置中断函数会导致之前设置的中断函数失效。同时,由于使能了中断功能,之前的工作可能会失效,因此需要重新进行配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32F7使用SPI发送完成和接收中断](https://blog.csdn.net/qq_27508477/article/details/105712114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值