求助,看不明白SPI配置及操作,恳求各位帮助

2019-07-19 21:10发布

本人新手,想做一个“两块STM8的SPI通信”小项目,但是SPI没学明白
现在敲了两段代码,希望各位帮忙看看,能不能实现相应的功能(板子坏了,硬件方针做不了了)

/*****功能:主机向从机发送一个八位数,从机接收判断,然后让不同的亮灯*****/
/**********主机程序***********/
#include "stm8s.h"
#include"stm8s_spi.h"
#include <iostm8s105s4.h>
#define csl GPIO_WriteLow(GPIOC,GPIO_PIN_3)
#define csh GPIO_WriteHigh(GPIOC,GPIO_PIN_3) //驱动从机NSS
void GPIO_Config();
void SPI_Master_Conf();
void main(void)
{
GPIO_Config();
SPI_Master_Conf();
while(1){
  if(SPI_GetFlagStatus(SPI_FLAG_TXE)==1)
        {
         csl;
         SPI_SendData(0x01);
         csh;
         SPI_ClearFlag(SPI_FLAG_TXE);
         }
     }
}
void SPI_Master_Conf(void)
{
SPI_Init(SPI_FIRSTBIT_MSB,
SPI_BAUDRATEPRESCALER_2,
SPI_MODE_MASTER,
SPI_CLOCKPOLARITY_LOW,
SPI_CLOCKPHASE_1EDGE,
SPI_DATADIRECTION_1LINE_TX,
SPI_NSS_SOFT,   //这里NSS_SOFT的设置是主机NSS管脚要上拉吗
0x00);
SPI_Cmd(ENABLE);     
}
void GPIO_Config()
{
   GPIO_DeInit(GPIOC);
   GPIO_Init(GPIOC,GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST); //MOSI
   GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_IN_FL_NO_IT); //MISO
   GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_FAST); //SCK
   GPIO_Init(GPIOC,GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST); //驱动从机NSS
}
/**********主机程序***********/

/**********从机程序***********/
#include "stm8s.h"
#include"stm8s_spi.h"
#include <iostm8s105s4.h>
u8 temp;
void GPIO_Config();
void SPI_Slave_Conf();
main(void)
{
SPI_Slave_Conf();
GPIO_Config();
        enableInterrupts();
while(1){
  if(temp == 0x01){
   GPIO_WriteLow(GPIOB, GPIO_PIN_6);
   GPIO_WriteHigh(GPIOB, GPIO_PIN_7);
  }
  else{
   GPIO_WriteHigh(GPIOB, GPIO_PIN_6);
   GPIO_WriteLow(GPIOB, GPIO_PIN_7);
  }
}
}
void SPI_Slave_Conf(void)
{
SPI_Init(SPI_FIRSTBIT_MSB,
SPI_BAUDRATEPRESCALER_2,
SPI_MODE_SLAVE,
SPI_CLOCKPOLARITY_LOW,
SPI_CLOCKPHASE_1EDGE,
SPI_DATADIRECTION_1LINE_RX,
SPI_NSS_SOFT,   //这里NSS_SOFT设置需要有主机IO提供片选信号
0x00);
SPI_ITConfig(SPI_IT_RXNE, ENABLE);
SPI_Cmd(ENABLE);     
}
void GPIO_Config()
{
   GPIO_DeInit(GPIOC);
   GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_IN_FL_NO_IT); //MOSI
   GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_FAST);  //MISO
   GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_IN_FL_NO_IT); //SCK
   GPIO_Init(GPIOC,GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT); //接收主机PC3片选信号
   GPIO_DeInit(GPIOB);
   GPIO_Init(GPIOB,GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_FAST);
   GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_OUT_PP_LOW_FAST);
}
#pragma vector=SPI_RXNE_vector
__interrupt void SPI_RXNE_IRQHandler(void)
{
   temp = SPI_DR;
}
/**********从机程序***********/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。