遇到一个奇葩问题:
我现在用STM32F103VC调CC2500.程序如下:
int main(void) //Ö÷º¯Êý
{
SystemInit();
RCC_Configuration();
CC2500_PIN_Config();
CC2500_Init();
CC2500_ModeIdle();
CC2500_Interrupt_Config();
CC2500_ModeRx();
while(1);
}
//函数
void RCC_Configuration(void) //ÅäÖÃÍⲿ¾§Õñ
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1); //APB = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div2); //APB2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //APB1 = HCLK/2
//FLASH_SetLatency(FLASH_Latency_2);
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
}//ÆôÓÃÍⲿ¸ßËÙ¾§Õñ£¬Ö÷ʱÖÓƵÂÊ72M£»SYSCLK = 72M
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
delay_init(72);
}
#define CC_CSn GPIO_Pin_2 //PD2
#define CC_SCLK GPIO_Pin_13 //PB13
#define CC_MISO GPIO_Pin_14 //PB14
#define CC_MOSI GPIO_Pin_15 //PB15
#define CC_GDO0 GPIO_Pin_3 //PD3
#define CC_GDO2 GPIO_Pin_11 //PA11
#define CC_CSn_L (GPIO_ResetBits(GPIOD,CC_CSn))
#define CC_CSn_H (GPIO_SetBits(GPIOD,CC_CSn))
#define CC_SLK_H (GPIO_SetBits(GPIOB,CC_SCLK))
#define CC_SLK_L (GPIO_ResetBits(GPIOB,CC_SCLK))
#define CC_MO_H (GPIO_SetBits(GPIOB,CC_MOSI))
#define CC_MO_L (GPIO_ResetBits(GPIOB,CC_MOSI))
#define CC2500_MI GPIO_ReadInputDataBit(GPIOB,CC_MISO)
#define GDO0_IN GPIO_ReadInputDataBit(GPIOD,CC_GDO0)
#define GDO2_IN GPIO_ReadInputDataBit(GPIOA,CC_GDO2)
void CC2500_PIN_Config(void)
{
GPIO_InitTypeDef GPIO_InitStru;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//SPI_2 Interface
GPIO_InitStru.GPIO_Pin = CC_SCLK + CC_MOSI;
GPIO_InitStru.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStru.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB,&GPIO_InitStru);
GPIO_InitStru.GPIO_Pin = CC_MISO;
GPIO_InitStru.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStru.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB,&GPIO_InitStru);
GPIO_InitStru.GPIO_Pin = CC_CSn;
GPIO_InitStru.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStru.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOD,&GPIO_InitStru);
//GDO PINs
GPIO_InitStru.GPIO_Pin = CC_GDO0 + CC_GDO2;
GPIO_InitStru.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStru.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOD,&GPIO_InitStru);
}
现在这个程序,完全没有问题。
然后我看到的CC2500的SPI是完全是模拟的。
然我把SPI的三个口改成了 PB3,PB4,PB5
就完全接收不到数据了,不知道什么原因、、、 |