登录/注册

stm32f103 spi写中断

更多

在 STM32F103 中使用 SPI 中断模式发送数据的关键步骤如下:


1. 初始化 SPI 外设

配置 SPI 为主机模式,设置通信参数(波特率、数据格式等):

SPI_InitTypeDef SPI_InitStruct;
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;          // 主机模式
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;       // 8 位数据
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;             // 时钟极性
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;           // 时钟相位
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;              // 软件控制 NSS
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 波特率分频
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;     // 高位先行
SPI_Init(SPI1, &SPI_InitStruct);
SPI_Cmd(SPI1, ENABLE);                              // 使能 SPI

2. 配置 SPI 发送中断

启用 TXE(发送缓冲区空中断),当发送寄存器空时触发中断:

SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, ENABLE);     // 使能 TXE 中断

3. 配置 NVIC 中断优先级

在 NVIC 中启用 SPI 中断通道并设置优先级:

NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = SPI1_IRQn;        // SPI1 中断通道
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);

4. 编写中断服务函数

stm32f10x_it.c 中实现 SPI 中断服务函数,处理数据发送:

volatile uint8_t txBuffer[] = "Hello SPI!";
volatile uint8_t txIndex = 0;
volatile uint8_t txSize = sizeof(txBuffer);

void SPI1_IRQHandler(void) {
    if (SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_TXE) == SET) {
        // 当发送寄存器空时,写入下一个字节
        if (txIndex < txSize) {
            SPI_I2S_SendData(SPI1, txBuffer[txIndex]);
            txIndex++;
        } else {
            // 数据发送完成,关闭 TXE 中断
            SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, DISABLE);
            // 可选:触发回调函数或标志位通知主程序
        }
        SPI_I2S_ClearITPendingBit(SPI1, SPI_I2S_IT_TXE); // 清除中断标志
    }
}

5. 启动数据传输

在需要发送数据时,手动触发第一次写入(后续由中断自动处理):

txIndex = 0; // 重置发送索引
SPI_I2S_SendData(SPI1, txBuffer[txIndex]); // 写入第一个字节
txIndex++;

关键注意事项

如果需要完整代码示例或进一步优化(如 DMA 传输),请提供更多具体需求!

ARM系列STM32F103芯片的解密方法

破解STM32F103芯片的方法

2023-09-19 09:03:40

ch32v103stm32f103的区别

ch32v103与stm32f103的区别  Ch32v103与STM32f103

2023-08-22 15:49:00

STM32F103 GPIO内部电路图讲解

STM32F103 GPIO内部电路图讲解

2023-02-01 16:32:14

STM32F103 库函数外部中断时程序卡死,追踪运行卡死在启动文件.s的 B.中解决办法,实测OK,供参考

STM32F103 库函数写外部中断时程序卡死,追踪运行卡死在启动文件.s的 B.中解决办法,实测OK,供参考

资料下载 佚名 2021-12-08 12:21:11

STM32F103STM32F030 SPI-miso配置不同点

在调试STM32F103和STM32F030的SPI时,发现两者的MISO配置不同,S

资料下载 张强 2021-12-02 16:06:14

stm32f103中断总结很详细

stm32f103中断总结很详细

资料下载 佚名 2021-11-24 17:06:02

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

基于STM32F103单片机的矩阵按键设计

本实验使用STM32F103单片机,主题代码通用的。

2022-12-09 17:18:46

STM32F103的外部中断要怎样去使用呢

STM32F103的外部中断有多少呢?如何对STM32F103的外部中断

2022-03-01 07:00:54

为什么STM32F103库函数外部中断时程序会卡死

为什么STM32F103库函数写外部中断时程序会卡死?是什么原因造成的?如何去解决呢?

2021-11-17 07:02:20

详解STM32F103的外部中断

STM32F103的外部中断是什么意思?使用STM32F103的外部中断

2021-11-16 09:31:38

STM32F103中断管理方法是什么

STM32F103的中断管理方法是什么?如何对STM32F103中断进行

2021-11-16 08:42:54

如何使用STM32F103的外部中断

这一章,将向大家介绍如何使用 STM32F103 的外部中断。前面的两章掌握了 STM32F103 的 IO 口最基本的操作。本章将介绍如何将

2021-08-13 07:54:55

stm32f030和stm32f103功能差异

stm32f030和stm32f103功能差异主要表现在哪?

2021-07-22 09:35:47

7天热门专题 换一换
相关标签