首页 > 解决方案 > 在 stm32f4 和 arduino 之间通信时出现 SPI 问题

问题描述

在我没有 HAL 库的 spi 代码中,如果我发送任何数据,它默认发送为 0xFF,我无法发送数据而不是 0xFF。这是我的代码:

#include <stm32f4xx.h>

uint8_t i = 100;
int j = 0;
uint8_t data = 82;

void afio_config(void);
void spi_init(void);

int main(void)
{
    afio_config();
    spi_init();
    NVIC_EnableIRQ(SPI2_IRQn);
    while(1)
    {
    }
}

void afio_config()
{
    RCC -> AHB1ENR |= (1<<1)|(1<<2);
    RCC -> APB1ENR |= (1<<14);
    GPIOB -> MODER |= (1<<21)|(1<<24);
    GPIOC -> MODER |= (1<<7)|(1<<5);
    GPIOB ->OTYPER &= ~((1<<12)&(1<<10));
    GPIOC ->OTYPER &= ~((1<<2)&(1<<3));
    GPIOB -> OSPEEDR |= (1<<24)|(1<<20);
    GPIOC -> OSPEEDR |= (1<<4)|(1<<6);
    GPIOB -> PUPDR |= (1<<25)|(1<<21);
    GPIOC -> PUPDR |= (1<<4)|(1<<6);
    GPIOC -> AFR[0] |= (1<<14)|(1<<12)|(1<<10)|(1<<8);
    GPIOB -> AFR[1] |= (1<<10)|(1<<8);
}


void spi_init()
{
    SPI2 ->CR1 |= (1<<4)|(1<<5);
    SPI2 ->CR1 |= (1<<15)|(1<<14);
    SPI2 ->CR1 |= (1<<9)|(1<<8);
    SPI2 ->CR2 |= (1<<7);
    SPI2 ->CR1 |= (1<<2);
    SPI2 ->CR1 |= (1<<6);
    GPIOB ->ODR &= ~(1<<12);
}

void SPI2_IRQHandler()
{
    SPI2 ->DR = data;
}

标签: stm32spistm32f4discovery

解决方案


推荐阅读