本人新手,想做一个“两块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;
}
/**********从机程序***********/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>