|
楼主 |
发表于 2013-4-23 21:08:20
|
显示全部楼层
xuchunjie 发表于 2013-4-23 10:03
检查一下SPI的初始化配置。
#include "ht32f175x_275x.h"
u8 r,t;
SPI_InitTypeDef SPI_InitStructure;
u8 spi0_writebyte(u8 byte)
{
/* Check on SPI1 Tx Buffer empty */
while(SPI_GetFlagStatus(SPI0, SPI_FLAG_TXBE)==RESET);
/* Send SPI1 data */
SPI_SendData(SPI0, byte);//数据经主机MOSI发送 = SPI0—>DR=byte;
while(SPI_GetFlagStatus(SPI0, SPI_FLAG_RXBNE)==RESET);
return SPI_ReceiveData(SPI0);//主机由MISO接收
}
int main(void)
{
/* Enable SPI0 ,SPI1 & AFIO APB clock */
CKCU_APBPerip0ClockConfig(CKCU_APBEN0_SPI0 | CKCU_APBEN0_SPI1 | CKCU_APBEN0_AFIO|CKCU_APBEN0_PB, ENABLE);
AFIO_GPBConfig(AFIO_PIN_0 | AFIO_PIN_1 , AFIO_MODE_DEFAULT);
GPIO_DirectionConfig (GPIOB,GPIO_PIN_0|GPIO_PIN_1, GPIO_DIR_OUT) ;
GPIO_WriteOutBits (GPIOB,GPIO_PIN_0|GPIO_PIN_1, SET);
/* configure PD0, PD1, PD2, PD3 to SPI0 mode */
AFIO_GPDConfig(AFIO_PIN_0 | AFIO_PIN_1 | AFIO_PIN_2 | AFIO_PIN_3, AFIO_MODE_2);
/* configure PC0, PC1, PC2, PC3 to SPI1 mode */
AFIO_GPCConfig(AFIO_PIN_0 | AFIO_PIN_1 | AFIO_PIN_2 | AFIO_PIN_3, AFIO_MODE_1);
/* SPI0 configuration */
SPI_InitStructure.SPI_Mode = SPI_MASTER;
SPI_InitStructure.SPI_FIFO = SPI_FIFO_DISABLE;
SPI_InitStructure.SPI_DataLength = SPI_DATALENGTH_8;
SPI_InitStructure.SPI_SELMode = SPI_SEL_HARDWARE;
SPI_InitStructure.SPI_SELPolarity = SPI_SELPOLARITY_LOW;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_LOW;//时钟闲时为低
SPI_InitStructure.SPI_CPHA = SPI_CPHA_FIRST;//第一个上升沿采样
SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;
SPI_InitStructure.SPI_RxFIFOTriggerLevel = 0;
SPI_InitStructure.SPI_TxFIFOTriggerLevel = 0;
SPI_InitStructure.SPI_ClockPrescaler = 4;
SPI_Init(SPI0, &SPI_InitStructure);
/* SPI1 configuration */
SPI_InitStructure.SPI_Mode = SPI_SLAVE;
SPI_Init(SPI1, &SPI_InitStructure);
/* Enable SPI0 & SPI1 */
SPI_Cmd(SPI0, ENABLE);
SPI_Cmd(SPI1, ENABLE);
/* Set SEL as output mode for slave select */
SPI_SELOutputCmd(SPI0, ENABLE);
/*先将要返回的数值放入SPI1->DR*/
while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXBE)==RESET);
SPI_SendData(SPI1, 0x12);
for(t=0;t<50;t++);//延时
r=spi0_writebyte(0x12);//主机SPI0向从机SPI1发送数据0x12
for(t=0;t<50;t++);//延时
if(r==0X12)//判定发送与接收的数据是否相等
{
GPIO_WriteOutBits (GPIOB,GPIO_PIN_0|GPIO_PIN_1, RESET);//led亮
}
while(1);
}
这是源程序,和STM32差不多的芯片,,,最后我发现只有if(r==0xff)的时候,led才会被点亮,也就是说。。。无论主机从miso接收什么,最后得到的都是0xff。。。。求解啊各位大侠!!!!~~ |
|