C 在STM32F4发现上配置SPI

C 在STM32F4发现上配置SPI,c,arm,spi,C,Arm,Spi,当使用示波器在引脚上进行测量时,我无法从MOSI引脚或CLK引脚获得任何数据 GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function GPIOB

当使用示波器在引脚上进行测量时,我无法从MOSI引脚或CLK引脚获得任何数据

                  GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function
                  GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function
                  GPIOB->MODER |= (2 << (2*15)); //Sets pin 15 as Alternate function
                  GPIOB->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOB->PUPDR |= PUPDR_PULLDOWN_PIN_13; // Pull down for CLK
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_14; // Pull up for MISO
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_15; // Pull up for MOSI

                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_13;  // 5 för AF5 till pin 13
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_14;  // 5 för AF5 till pin 14
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_15;  // 5 för AF5 till pin 15
                  GPIOA->MODER |= MODER_INPUT_PIN_0;
                  GPIOD->MODER |= MODER_OUTPUT_PIN_12; //Sets pin 12 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_13; //Sets pin 13 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_14; //Sets pin 14 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_15; //Sets pin 15 as output

                  GPIOD->OTYPER |= PUSH_PULL_PIN_12;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_12;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_12; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_13; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_14; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_15; //Frågetecken på denna, ska det vara 0 1 eller 2??

                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_12;  // 0 för AF0 till pin 12
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_13;  // 0 för AF0 till pin 13
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_14;  // 0 för AF0 till pin 14
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_15;  // 0 för AF0 till pin 15
                  SPI2->CR1 |= (0 << CR1_CLOCK_PHASE);       //Set clockphase in CR1 register
                  SPI2->CR1 |= (1 << CR1_CLOCK_POLARITY);    //Set polarity in CR1 register
                  SPI2->CR1 |= (4 << CR1_BAUD_RATE);         //Set baudrate
                  SPI2->CR1 |= (1 << CR1_DATA_FRAME_FORMAT); //16-bit transmission
                  SPI2->CR1 |= (1 << CR1_ENABLE_SPI);        //Enable SPI
                  SPI2->CR1 |= (1 << CR1_MASTER_SELECT);     //MASTER SELECTION
                  SPI2->CR1 |= (1 << CR1_LSB_FIRST);         //LSB FIRST
                  SPI2->CR1 |= (1 << CR1_SLAVE_SELECT);      //SSI set
                  SPI2->CR1 |= (1 << CR1_SW_SLAVE_MANAGE);   //SSM, software slave management selected, which means SSI will be used insted of I/O
                  SPI2->CR1 |= (0 << CR1_RECEIVE_ONLY);      //Transmit and Receive
                  SPI2->CR1 |= (0 << CR1_CRC_TRANSFER);      //NOT USED, CRC
                  //SPI2->CR1 |= (0 << CR1_CRC_CALCULATION); //NOT USED, CRC calculation disabled
                  //SPI2->CR1 |= (0 << CR1_BIDIOE);          //enable transmit-only if set
                  SPI2->CR1 |= (0 << CR1_BIDIMODE);          //1-line bidirectional mode if set
                  //SYSCFG->EXTICR[0] |= (0 << 0); //Enable
                  EXTI->IMR |= (1 << 0);      //Enable interrupt
                  EXTI->RTSR |= (1 << 0);    //set Risnig edge interrupt
                  EXTI->FTSR |= (0 << 0);    //falling edge interrupt (disabled)
                  NVIC_EnableIRQ(EXTI0_IRQn);
                  SPI2->CR2 |= (1 << 7);

                  while(1){
                         GPIOD->ODR |= (1 << 12); // led ON
                         delay();
                         GPIOD->ODR &= ~(1 << 12); // led OFF
                         delay();
                  }

                  return 0;
这是我的代码:

                  GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function
                  GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function
                  GPIOB->MODER |= (2 << (2*15)); //Sets pin 15 as Alternate function
                  GPIOB->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOB->PUPDR |= PUPDR_PULLDOWN_PIN_13; // Pull down for CLK
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_14; // Pull up for MISO
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_15; // Pull up for MOSI

                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_13;  // 5 för AF5 till pin 13
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_14;  // 5 för AF5 till pin 14
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_15;  // 5 för AF5 till pin 15
                  GPIOA->MODER |= MODER_INPUT_PIN_0;
                  GPIOD->MODER |= MODER_OUTPUT_PIN_12; //Sets pin 12 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_13; //Sets pin 13 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_14; //Sets pin 14 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_15; //Sets pin 15 as output

                  GPIOD->OTYPER |= PUSH_PULL_PIN_12;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_12;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_12; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_13; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_14; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_15; //Frågetecken på denna, ska det vara 0 1 eller 2??

                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_12;  // 0 för AF0 till pin 12
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_13;  // 0 för AF0 till pin 13
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_14;  // 0 för AF0 till pin 14
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_15;  // 0 för AF0 till pin 15
                  SPI2->CR1 |= (0 << CR1_CLOCK_PHASE);       //Set clockphase in CR1 register
                  SPI2->CR1 |= (1 << CR1_CLOCK_POLARITY);    //Set polarity in CR1 register
                  SPI2->CR1 |= (4 << CR1_BAUD_RATE);         //Set baudrate
                  SPI2->CR1 |= (1 << CR1_DATA_FRAME_FORMAT); //16-bit transmission
                  SPI2->CR1 |= (1 << CR1_ENABLE_SPI);        //Enable SPI
                  SPI2->CR1 |= (1 << CR1_MASTER_SELECT);     //MASTER SELECTION
                  SPI2->CR1 |= (1 << CR1_LSB_FIRST);         //LSB FIRST
                  SPI2->CR1 |= (1 << CR1_SLAVE_SELECT);      //SSI set
                  SPI2->CR1 |= (1 << CR1_SW_SLAVE_MANAGE);   //SSM, software slave management selected, which means SSI will be used insted of I/O
                  SPI2->CR1 |= (0 << CR1_RECEIVE_ONLY);      //Transmit and Receive
                  SPI2->CR1 |= (0 << CR1_CRC_TRANSFER);      //NOT USED, CRC
                  //SPI2->CR1 |= (0 << CR1_CRC_CALCULATION); //NOT USED, CRC calculation disabled
                  //SPI2->CR1 |= (0 << CR1_BIDIOE);          //enable transmit-only if set
                  SPI2->CR1 |= (0 << CR1_BIDIMODE);          //1-line bidirectional mode if set
                  //SYSCFG->EXTICR[0] |= (0 << 0); //Enable
                  EXTI->IMR |= (1 << 0);      //Enable interrupt
                  EXTI->RTSR |= (1 << 0);    //set Risnig edge interrupt
                  EXTI->FTSR |= (0 << 0);    //falling edge interrupt (disabled)
                  NVIC_EnableIRQ(EXTI0_IRQn);
                  SPI2->CR2 |= (1 << 7);

                  while(1){
                         GPIOD->ODR |= (1 << 12); // led ON
                         delay();
                         GPIOD->ODR &= ~(1 << 12); // led OFF
                         delay();
                  }

                  return 0;
包括 包括“stm32f407xx.h” 无效延迟(){

                  GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function
                  GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function
                  GPIOB->MODER |= (2 << (2*15)); //Sets pin 15 as Alternate function
                  GPIOB->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOB->PUPDR |= PUPDR_PULLDOWN_PIN_13; // Pull down for CLK
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_14; // Pull up for MISO
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_15; // Pull up for MOSI

                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_13;  // 5 för AF5 till pin 13
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_14;  // 5 för AF5 till pin 14
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_15;  // 5 för AF5 till pin 15
                  GPIOA->MODER |= MODER_INPUT_PIN_0;
                  GPIOD->MODER |= MODER_OUTPUT_PIN_12; //Sets pin 12 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_13; //Sets pin 13 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_14; //Sets pin 14 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_15; //Sets pin 15 as output

                  GPIOD->OTYPER |= PUSH_PULL_PIN_12;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_12;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_12; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_13; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_14; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_15; //Frågetecken på denna, ska det vara 0 1 eller 2??

                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_12;  // 0 för AF0 till pin 12
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_13;  // 0 för AF0 till pin 13
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_14;  // 0 för AF0 till pin 14
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_15;  // 0 för AF0 till pin 15
                  SPI2->CR1 |= (0 << CR1_CLOCK_PHASE);       //Set clockphase in CR1 register
                  SPI2->CR1 |= (1 << CR1_CLOCK_POLARITY);    //Set polarity in CR1 register
                  SPI2->CR1 |= (4 << CR1_BAUD_RATE);         //Set baudrate
                  SPI2->CR1 |= (1 << CR1_DATA_FRAME_FORMAT); //16-bit transmission
                  SPI2->CR1 |= (1 << CR1_ENABLE_SPI);        //Enable SPI
                  SPI2->CR1 |= (1 << CR1_MASTER_SELECT);     //MASTER SELECTION
                  SPI2->CR1 |= (1 << CR1_LSB_FIRST);         //LSB FIRST
                  SPI2->CR1 |= (1 << CR1_SLAVE_SELECT);      //SSI set
                  SPI2->CR1 |= (1 << CR1_SW_SLAVE_MANAGE);   //SSM, software slave management selected, which means SSI will be used insted of I/O
                  SPI2->CR1 |= (0 << CR1_RECEIVE_ONLY);      //Transmit and Receive
                  SPI2->CR1 |= (0 << CR1_CRC_TRANSFER);      //NOT USED, CRC
                  //SPI2->CR1 |= (0 << CR1_CRC_CALCULATION); //NOT USED, CRC calculation disabled
                  //SPI2->CR1 |= (0 << CR1_BIDIOE);          //enable transmit-only if set
                  SPI2->CR1 |= (0 << CR1_BIDIMODE);          //1-line bidirectional mode if set
                  //SYSCFG->EXTICR[0] |= (0 << 0); //Enable
                  EXTI->IMR |= (1 << 0);      //Enable interrupt
                  EXTI->RTSR |= (1 << 0);    //set Risnig edge interrupt
                  EXTI->FTSR |= (0 << 0);    //falling edge interrupt (disabled)
                  NVIC_EnableIRQ(EXTI0_IRQn);
                  SPI2->CR2 |= (1 << 7);

                  while(1){
                         GPIOD->ODR |= (1 << 12); // led ON
                         delay();
                         GPIOD->ODR &= ~(1 << 12); // led OFF
                         delay();
                  }

                  return 0;
LED的GPIO D初始化

                  GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function
                  GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function
                  GPIOB->MODER |= (2 << (2*15)); //Sets pin 15 as Alternate function
                  GPIOB->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOB->PUPDR |= PUPDR_PULLDOWN_PIN_13; // Pull down for CLK
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_14; // Pull up for MISO
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_15; // Pull up for MOSI

                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_13;  // 5 för AF5 till pin 13
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_14;  // 5 för AF5 till pin 14
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_15;  // 5 för AF5 till pin 15
                  GPIOA->MODER |= MODER_INPUT_PIN_0;
                  GPIOD->MODER |= MODER_OUTPUT_PIN_12; //Sets pin 12 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_13; //Sets pin 13 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_14; //Sets pin 14 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_15; //Sets pin 15 as output

                  GPIOD->OTYPER |= PUSH_PULL_PIN_12;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_12;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_12; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_13; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_14; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_15; //Frågetecken på denna, ska det vara 0 1 eller 2??

                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_12;  // 0 för AF0 till pin 12
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_13;  // 0 för AF0 till pin 13
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_14;  // 0 för AF0 till pin 14
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_15;  // 0 för AF0 till pin 15
                  SPI2->CR1 |= (0 << CR1_CLOCK_PHASE);       //Set clockphase in CR1 register
                  SPI2->CR1 |= (1 << CR1_CLOCK_POLARITY);    //Set polarity in CR1 register
                  SPI2->CR1 |= (4 << CR1_BAUD_RATE);         //Set baudrate
                  SPI2->CR1 |= (1 << CR1_DATA_FRAME_FORMAT); //16-bit transmission
                  SPI2->CR1 |= (1 << CR1_ENABLE_SPI);        //Enable SPI
                  SPI2->CR1 |= (1 << CR1_MASTER_SELECT);     //MASTER SELECTION
                  SPI2->CR1 |= (1 << CR1_LSB_FIRST);         //LSB FIRST
                  SPI2->CR1 |= (1 << CR1_SLAVE_SELECT);      //SSI set
                  SPI2->CR1 |= (1 << CR1_SW_SLAVE_MANAGE);   //SSM, software slave management selected, which means SSI will be used insted of I/O
                  SPI2->CR1 |= (0 << CR1_RECEIVE_ONLY);      //Transmit and Receive
                  SPI2->CR1 |= (0 << CR1_CRC_TRANSFER);      //NOT USED, CRC
                  //SPI2->CR1 |= (0 << CR1_CRC_CALCULATION); //NOT USED, CRC calculation disabled
                  //SPI2->CR1 |= (0 << CR1_BIDIOE);          //enable transmit-only if set
                  SPI2->CR1 |= (0 << CR1_BIDIMODE);          //1-line bidirectional mode if set
                  //SYSCFG->EXTICR[0] |= (0 << 0); //Enable
                  EXTI->IMR |= (1 << 0);      //Enable interrupt
                  EXTI->RTSR |= (1 << 0);    //set Risnig edge interrupt
                  EXTI->FTSR |= (0 << 0);    //falling edge interrupt (disabled)
                  NVIC_EnableIRQ(EXTI0_IRQn);
                  SPI2->CR2 |= (1 << 7);

                  while(1){
                         GPIOD->ODR |= (1 << 12); // led ON
                         delay();
                         GPIOD->ODR &= ~(1 << 12); // led OFF
                         delay();
                  }

                  return 0;
////////SPI初始化

                  GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function
                  GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function
                  GPIOB->MODER |= (2 << (2*15)); //Sets pin 15 as Alternate function
                  GPIOB->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOB->PUPDR |= PUPDR_PULLDOWN_PIN_13; // Pull down for CLK
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_14; // Pull up for MISO
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_15; // Pull up for MOSI

                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_13;  // 5 för AF5 till pin 13
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_14;  // 5 för AF5 till pin 14
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_15;  // 5 för AF5 till pin 15
                  GPIOA->MODER |= MODER_INPUT_PIN_0;
                  GPIOD->MODER |= MODER_OUTPUT_PIN_12; //Sets pin 12 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_13; //Sets pin 13 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_14; //Sets pin 14 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_15; //Sets pin 15 as output

                  GPIOD->OTYPER |= PUSH_PULL_PIN_12;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_12;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_12; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_13; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_14; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_15; //Frågetecken på denna, ska det vara 0 1 eller 2??

                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_12;  // 0 för AF0 till pin 12
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_13;  // 0 för AF0 till pin 13
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_14;  // 0 för AF0 till pin 14
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_15;  // 0 för AF0 till pin 15
                  SPI2->CR1 |= (0 << CR1_CLOCK_PHASE);       //Set clockphase in CR1 register
                  SPI2->CR1 |= (1 << CR1_CLOCK_POLARITY);    //Set polarity in CR1 register
                  SPI2->CR1 |= (4 << CR1_BAUD_RATE);         //Set baudrate
                  SPI2->CR1 |= (1 << CR1_DATA_FRAME_FORMAT); //16-bit transmission
                  SPI2->CR1 |= (1 << CR1_ENABLE_SPI);        //Enable SPI
                  SPI2->CR1 |= (1 << CR1_MASTER_SELECT);     //MASTER SELECTION
                  SPI2->CR1 |= (1 << CR1_LSB_FIRST);         //LSB FIRST
                  SPI2->CR1 |= (1 << CR1_SLAVE_SELECT);      //SSI set
                  SPI2->CR1 |= (1 << CR1_SW_SLAVE_MANAGE);   //SSM, software slave management selected, which means SSI will be used insted of I/O
                  SPI2->CR1 |= (0 << CR1_RECEIVE_ONLY);      //Transmit and Receive
                  SPI2->CR1 |= (0 << CR1_CRC_TRANSFER);      //NOT USED, CRC
                  //SPI2->CR1 |= (0 << CR1_CRC_CALCULATION); //NOT USED, CRC calculation disabled
                  //SPI2->CR1 |= (0 << CR1_BIDIOE);          //enable transmit-only if set
                  SPI2->CR1 |= (0 << CR1_BIDIMODE);          //1-line bidirectional mode if set
                  //SYSCFG->EXTICR[0] |= (0 << 0); //Enable
                  EXTI->IMR |= (1 << 0);      //Enable interrupt
                  EXTI->RTSR |= (1 << 0);    //set Risnig edge interrupt
                  EXTI->FTSR |= (0 << 0);    //falling edge interrupt (disabled)
                  NVIC_EnableIRQ(EXTI0_IRQn);
                  SPI2->CR2 |= (1 << 7);

                  while(1){
                         GPIOD->ODR |= (1 << 12); // led ON
                         delay();
                         GPIOD->ODR &= ~(1 << 12); // led OFF
                         delay();
                  }

                  return 0;
“代码>Sp2>Sp2>Sp2>Sp2>码>Sp2>码>Sp2>>Sp2>码>Sp2>>Sp2>Sp2>Sp2>Sp2>Sp2>Sp2>Sp2>Sp2>Sp2>>Sp2>>Sp2>>Sp2>>Sp2>>Sp2>>Sp2>>0 CR1=1.CR1>1 \\\124;=(1.4四四四CR1>1>1>1>1>1>>1>1>1>>>1>1>>1>1>1>1>>1>1>1>1>1>1(1>上述上述上述四四四四个CR1 取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取1(4.1 \\\r&=~(1 PR |)=(1 ODR |)=(1 ODR&=~(1 DR |)=0xFF; }
}

请使用stm32f407xx.h文件中适当的宏定义。最好阅读:

                  GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function
                  GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function
                  GPIOB->MODER |= (2 << (2*15)); //Sets pin 15 as Alternate function
                  GPIOB->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOB->PUPDR |= PUPDR_PULLDOWN_PIN_13; // Pull down for CLK
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_14; // Pull up for MISO
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_15; // Pull up for MOSI

                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_13;  // 5 för AF5 till pin 13
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_14;  // 5 för AF5 till pin 14
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_15;  // 5 för AF5 till pin 15
                  GPIOA->MODER |= MODER_INPUT_PIN_0;
                  GPIOD->MODER |= MODER_OUTPUT_PIN_12; //Sets pin 12 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_13; //Sets pin 13 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_14; //Sets pin 14 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_15; //Sets pin 15 as output

                  GPIOD->OTYPER |= PUSH_PULL_PIN_12;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_12;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_12; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_13; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_14; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_15; //Frågetecken på denna, ska det vara 0 1 eller 2??

                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_12;  // 0 för AF0 till pin 12
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_13;  // 0 för AF0 till pin 13
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_14;  // 0 för AF0 till pin 14
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_15;  // 0 för AF0 till pin 15
                  SPI2->CR1 |= (0 << CR1_CLOCK_PHASE);       //Set clockphase in CR1 register
                  SPI2->CR1 |= (1 << CR1_CLOCK_POLARITY);    //Set polarity in CR1 register
                  SPI2->CR1 |= (4 << CR1_BAUD_RATE);         //Set baudrate
                  SPI2->CR1 |= (1 << CR1_DATA_FRAME_FORMAT); //16-bit transmission
                  SPI2->CR1 |= (1 << CR1_ENABLE_SPI);        //Enable SPI
                  SPI2->CR1 |= (1 << CR1_MASTER_SELECT);     //MASTER SELECTION
                  SPI2->CR1 |= (1 << CR1_LSB_FIRST);         //LSB FIRST
                  SPI2->CR1 |= (1 << CR1_SLAVE_SELECT);      //SSI set
                  SPI2->CR1 |= (1 << CR1_SW_SLAVE_MANAGE);   //SSM, software slave management selected, which means SSI will be used insted of I/O
                  SPI2->CR1 |= (0 << CR1_RECEIVE_ONLY);      //Transmit and Receive
                  SPI2->CR1 |= (0 << CR1_CRC_TRANSFER);      //NOT USED, CRC
                  //SPI2->CR1 |= (0 << CR1_CRC_CALCULATION); //NOT USED, CRC calculation disabled
                  //SPI2->CR1 |= (0 << CR1_BIDIOE);          //enable transmit-only if set
                  SPI2->CR1 |= (0 << CR1_BIDIMODE);          //1-line bidirectional mode if set
                  //SYSCFG->EXTICR[0] |= (0 << 0); //Enable
                  EXTI->IMR |= (1 << 0);      //Enable interrupt
                  EXTI->RTSR |= (1 << 0);    //set Risnig edge interrupt
                  EXTI->FTSR |= (0 << 0);    //falling edge interrupt (disabled)
                  NVIC_EnableIRQ(EXTI0_IRQn);
                  SPI2->CR2 |= (1 << 7);

                  while(1){
                         GPIOD->ODR |= (1 << 12); // led ON
                         delay();
                         GPIOD->ODR &= ~(1 << 12); // led OFF
                         delay();
                  }

                  return 0;
TIM2->DIER |= TIM_DIER_UIE; /* interrupt enable on 1st channel */
比:

                  GPIOB->MODER |= (2 << (2*13)); //Sets pin 13 as Alternate function
                  GPIOB->MODER |= (2 << (2*14)); //Sets pin 14 as Alternate function
                  GPIOB->MODER |= (2 << (2*15)); //Sets pin 15 as Alternate function
                  GPIOB->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOB->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOB->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOB->PUPDR |= PUPDR_PULLDOWN_PIN_13; // Pull down for CLK
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_14; // Pull up for MISO
                  GPIOB->PUPDR |= PUPDR_PULLUP_PIN_15; // Pull up for MOSI

                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_13;  // 5 för AF5 till pin 13
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_14;  // 5 för AF5 till pin 14
                  GPIOB->AFR[1] |= ALT_FUNC_AF5_PIN_15;  // 5 för AF5 till pin 15
                  GPIOA->MODER |= MODER_INPUT_PIN_0;
                  GPIOD->MODER |= MODER_OUTPUT_PIN_12; //Sets pin 12 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_13; //Sets pin 13 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_14; //Sets pin 14 as output
                  GPIOD->MODER |= MODER_OUTPUT_PIN_15; //Sets pin 15 as output

                  GPIOD->OTYPER |= PUSH_PULL_PIN_12;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_13;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_14;
                  GPIOD->OTYPER |= PUSH_PULL_PIN_15;

                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_12;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_13;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_14;
                  GPIOD->OSPEEDR |= OSPEEDR_MEDIUM_PIN_15;

                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_12; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_13; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_14; //Frågetecken på denna, ska det vara 0 1 eller 2??
                  GPIOD->PUPDR |= PUPDR_PULLDOWN_PIN_15; //Frågetecken på denna, ska det vara 0 1 eller 2??

                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_12;  // 0 för AF0 till pin 12
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_13;  // 0 för AF0 till pin 13
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_14;  // 0 för AF0 till pin 14
                  GPIOD->AFR[1] |= ALT_FUNC_AF0_PIN_15;  // 0 för AF0 till pin 15
                  SPI2->CR1 |= (0 << CR1_CLOCK_PHASE);       //Set clockphase in CR1 register
                  SPI2->CR1 |= (1 << CR1_CLOCK_POLARITY);    //Set polarity in CR1 register
                  SPI2->CR1 |= (4 << CR1_BAUD_RATE);         //Set baudrate
                  SPI2->CR1 |= (1 << CR1_DATA_FRAME_FORMAT); //16-bit transmission
                  SPI2->CR1 |= (1 << CR1_ENABLE_SPI);        //Enable SPI
                  SPI2->CR1 |= (1 << CR1_MASTER_SELECT);     //MASTER SELECTION
                  SPI2->CR1 |= (1 << CR1_LSB_FIRST);         //LSB FIRST
                  SPI2->CR1 |= (1 << CR1_SLAVE_SELECT);      //SSI set
                  SPI2->CR1 |= (1 << CR1_SW_SLAVE_MANAGE);   //SSM, software slave management selected, which means SSI will be used insted of I/O
                  SPI2->CR1 |= (0 << CR1_RECEIVE_ONLY);      //Transmit and Receive
                  SPI2->CR1 |= (0 << CR1_CRC_TRANSFER);      //NOT USED, CRC
                  //SPI2->CR1 |= (0 << CR1_CRC_CALCULATION); //NOT USED, CRC calculation disabled
                  //SPI2->CR1 |= (0 << CR1_BIDIOE);          //enable transmit-only if set
                  SPI2->CR1 |= (0 << CR1_BIDIMODE);          //1-line bidirectional mode if set
                  //SYSCFG->EXTICR[0] |= (0 << 0); //Enable
                  EXTI->IMR |= (1 << 0);      //Enable interrupt
                  EXTI->RTSR |= (1 << 0);    //set Risnig edge interrupt
                  EXTI->FTSR |= (0 << 0);    //falling edge interrupt (disabled)
                  NVIC_EnableIRQ(EXTI0_IRQn);
                  SPI2->CR2 |= (1 << 7);

                  while(1){
                         GPIOD->ODR |= (1 << 12); // led ON
                         delay();
                         GPIOD->ODR &= ~(1 << 12); // led OFF
                         delay();
                  }

                  return 0;

TIM2->DIER |=(1 AFR[1]|=(0 CR2 |=(1)我忘记了什么?有没有我没有配置的寄存器?功能性,当按下用户按钮时,主机应该发送数据,这将启动一个中断,发送应该在名为“void EXTI0|IRQHandler()的中断函数中完成。此中断工作正常,按下按钮时LED以不同的颜色闪烁。我现在改为宏。我认为最开始的错误。LED应该是0。没错,应该是28。但这并不能解决SPI的问题,这只是针对LED编辑3:我试图设置控制寄存器,以便TXE位当tx缓冲区为空时,状态寄存器被设置,所以我知道何时发送下一个字节。我一定错过了配置某些总线或寄存器或其他东西。