| 
 
初级会员 
 
	积分106金钱106 注册时间2016-7-23在线时间13 小时 | 
 
2金钱 
| 本人新手,想做一个“两块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;
 }
 /**********从机程序***********/
 
 | 
 |