NIRQ配置成RX data output,即NIRQ和单片机引脚相连单片机可以通过该引脚判断是否有数据接收。低电平有效!然后即可生成代码!
生成的代码是基于C8051F910单片机的,我们所用的是,所以必须做好移植。
SPI移植:
不需要生成spi.c,建立STM32 SPI配置文件:
#include
#include"stm32f10x_spi.h"
#include"STM32SPI2.h"
u8STM32SPI2_ReadWriteByte(u8TxData)
{
u8retry=0;
while((SPI2->SR&1<<1)==0){
retry++;
if(retry>250)
return0;
}
SPI2->DR=TxData;
retry=0;
while((SPI2->SR&1<<0)==0)//
{
retry++;
if(retry>250)
return0;
}
returnSPI2->DR;
}
//APB2=72M/8=9M
voidSTM32SPI2_Config(void)
{
SPI_InitTypeDefSPI_InitStructure;
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/*ConfigureSPI2pins:SCK,MISOandMOSI*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*ConfigureNSELpins*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
/*SPI2configuration*/
SPI_I2S_DeInit(SPI2);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
SPI_Cmd(SPI2,DISABLE);
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_128;//SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial=7;
SPI_Init(SPI2,&SPI_InitStructure);
/*EnableSPI2*/
SPI_Cmd(SPI2,ENABLE);
STM32SPI2_ReadWriteByte(0xff);//启动传输
}
//í?ò?ê±?????üê1?üò???SPIéè±?,2?êyTYPE_SPI_ALL?TD§
voidSTM32SPI2_Enable(TYPE_SPItype)
{
/*
if(type==TYPE_SPI_FLASH)//这其实没啥用
{
GPIO_SetBits(GPIOA,GPIO_Pin_4);//ê§?üRF
GPIO_ResetBits(GPIOC,GPIO_Pin_4);//ê1?üFLASH
}
else
{
*/
//GPIO_SetBits(GPIOC,GPIO_Pin_4);//ê§?üFLASH
GPIO_ResetBits(GPIOB,GPIO_Pin_12);//
/*
}
*/
}
voidSTM32SPI2_Disable(TYPE_SPItype)
{
if(type==TYPE_SPI_FLASH)
{
GPIO_SetBits(GPIOC,GPIO_Pin_4);//ê§?üFLASH
}
elseif(type==TYPE_SPI_RF)
{
GPIO_SetBits(GPIOB,GPIO_Pin_12);//ê§?üRF
}
else
{
GPIO_SetBits(GPIOC,GPIO_Pin_4);//ê§?üFLASH
GPIO_SetBits(GPIOA,GPIO_Pin_4);//ê§?üRF
}
}
radio.cradiohal层spi接口修改处
voidradio_hal_SpiWriteByte(u8byteToWrite)
{
STM32SPI2_ReadWriteByte(byteToWrite);
}
u8radio_hal_SpiReadByte(void)
{
returnSTM32SPI2_ReadWriteByte(0xFF);
}
voidradio_hal_SpiWriteData(u8byteCount,u8*pData)
{
while(byteCount--)
{
STM32SPI2_ReadWriteByte(*pData++);
}
}
voidradio_hal_SpiReadData(u8byteCount,u8*pData)
{
while(byteCount--)
{
*pData++=STM32SPI2_ReadWriteByte(0xFF);
}
}
Radio_Config:配置SDNpowerIRQ引脚
voidRadio_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
//oíFLASH12ó?ò???SPI,SPIò??-?úFLASHμ?3?ê??ˉ?Dμ&pide;ó?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
//RF_POWER
GPIO_InitStructure.GPIO_Pin=RF_POWER_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(RF_POWER_PORT,&GPIO_InitStructure);
GPIO_SetBits(RF_POWER_PORT,RF_POWER_PIN);
//RF_ON
GPIO_InitStructure.GPIO_Pin = RF_
GPIO_InitStructure.GPIO_Pin=RF_ON_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(RF_ON_PORT,&GPIO_InitStructure);
GPIO_SetBits(RF_ON_PORT,RF_ON_PIN);
//RF_SDN
GPIO_InitStructure.GPIO_Pin=RF_SDN_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(RF_SDN_PORT,&GPIO_InitStructure);
GPIO_SetBits(RF_SDN_PORT,RF_SDN_PIN);
//RF_IRQ
GPIO_InitStructure.GPIO_Pin=RF_IRQ_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//????ê?è?
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(RF_IRQ_PORT,&GPIO_InitStructure);
} |