#include "myRadio_gpio.h" #include "stm32f10x.h" #include "stm32f10x_exti.h" #include "stm32f10x_it.h" RADIO_GPIO_CALLBACK gpioCallback; static irqCallback_ts myIrqCallback_extiLine1; static irqCallback_ts myIrqCallback_extiLine0; //---------------------------射频SPI驱动部分--------------------- void BOARD_SPI_NSS_H(void) { GPIO_WriteBit(BOARD_GPIO_SPI_CSN, BOARD_PIN_H); } void BOARD_SPI_NSS_L(void) { GPIO_WriteBit(BOARD_GPIO_SPI_CSN, BOARD_PIN_L); } void BOARD_SPI_SCK_H(void) { GPIO_WriteBit(BOARD_GPIO_SPI_CLK, BOARD_PIN_H); } void BOARD_SPI_SCK_L(void) { GPIO_WriteBit(BOARD_GPIO_SPI_CLK, BOARD_PIN_L); } void BOARD_SPI_MISO_H(void) { GPIO_WriteBit(BOARD_GPIO_SPI_MISO, BOARD_PIN_H); } void BOARD_SPI_MISO_L(void) { GPIO_WriteBit(BOARD_GPIO_SPI_MISO, BOARD_PIN_L); } void BOARD_SPI_MOSI_H(void) { GPIO_WriteBit(BOARD_GPIO_SPI_MOSI, BOARD_PIN_H); } void BOARD_SPI_MOSI_L(void) { GPIO_WriteBit(BOARD_GPIO_SPI_MOSI, BOARD_PIN_L); } uint8_t READ_BOARD_SPI_MISO(void) { return GPIO_ReadInputDataBit(BOARD_GPIO_SPI_MISO); } void SET_BOARD_SPI_MISO_IN(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = BOARD_PIN_SPI_MISO; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BOARD_PORT_SPI_MISO, &GPIO_InitStructure); } void SET_BOARD_SPI_MISO_OUT(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = BOARD_PIN_SPI_MISO; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BOARD_PORT_SPI_MISO, &GPIO_InitStructure); } void SET_BOARD_SPI_CLK_OUT(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = BOARD_PIN_SPI_CLK; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BOARD_PORT_SPI_CLK, &GPIO_InitStructure); } //---------------------------射频驱动IO部分--------------------- void RF_CMT2300A_GPIO1_H(void) { GPIO_WriteBit(RF_CMT2300A_GPIO1, BOARD_PIN_H); } void RF_CMT2300A_GPIO1_L(void) { GPIO_WriteBit(RF_CMT2300A_GPIO1, BOARD_PIN_L); } void RF_CMT2300A_GPIO2_H(void) { GPIO_WriteBit(RF_CMT2300A_GPIO2, BOARD_PIN_H); } void RF_CMT2300A_GPIO2_L(void) { GPIO_WriteBit(RF_CMT2300A_GPIO2, BOARD_PIN_L); } void RF_CMT2300A_GPIO3_H(void) { GPIO_WriteBit(RF_CMT2300A_GPIO3, BOARD_PIN_H); } void RF_CMT2300A_GPIO3_L(void) { GPIO_WriteBit(RF_CMT2300A_GPIO3, BOARD_PIN_L); } void RF_CMT2300A_FCSB_H(void) { GPIO_WriteBit(RF_CMT2300A_FCSB, BOARD_PIN_H); } void RF_CMT2300A_FCSB_L(void) { GPIO_WriteBit(RF_CMT2300A_FCSB, BOARD_PIN_L); } void RF_EXT_PA_RE_H(void) { GPIO_WriteBit(RF_EXTPA_RE, BOARD_PIN_H); } void RF_EXT_PA_RE_L(void) { GPIO_WriteBit(RF_EXTPA_RE, BOARD_PIN_L); } void RF_EXT_PA_TE_H(void) { GPIO_WriteBit(RF_EXTPA_TE, BOARD_PIN_H); } void RF_EXT_PA_TE_L(void) { GPIO_WriteBit(RF_EXTPA_TE, BOARD_PIN_L); } uint8_t READ_RF_CMT2300A_GPIO1(void) { return GPIO_ReadInputDataBit(RF_CMT2300A_GPIO1); } uint8_t READ_RF_CMT2300A_GPIO2(void) { return GPIO_ReadInputDataBit(RF_CMT2300A_GPIO2); } uint8_t READ_RF_CMT2300A_GPIO3(void) { return GPIO_ReadInputDataBit(RF_CMT2300A_GPIO3); } void myRadio_delayMs(uint32_t delayMs) { uint32_t i = 0; uint32_t j = 0; for (i = 0; i < delayMs; i++) { for (j = 0; j < 10000; j++) { ; } } } void myRadio_delayUs(uint32_t delayUs) { uint32_t i = 0; uint32_t j = 0; for (i = 0; i < delayUs; i++) { for (j = 0; j < 1; j++) { ; } } } /** * @brief 引脚控制 * * @param sta =true,设置进入低功耗的引脚状态 * =false,设置退出低功耗的引脚状态 */ void myRadio_gpio_intoLwPwr(bool sta) { if (sta == false) { } else { } } void extiLine1_callback(uint8_t status, uint32_t param) { if (gpioCallback) { if (READ_RF_CMT2300A_GPIO2()) { gpioCallback(0); } } } void extiLine0_callback(uint8_t status, uint32_t param) { if (gpioCallback) { if (READ_RF_CMT2300A_GPIO1()) { gpioCallback(1); } } } void myRadio_gpio_irq_init() { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = RF_CMT2300A_GPIO1_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(RF_CMT2300A_GPIO1_PORT, &GPIO_InitStructure); EXTI_ClearITPendingBit(EXTI_Line0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); /* Enable and set EXTI1 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); EXTI_ClearITPendingBit(EXTI_Line1); EXTI_InitStructure.EXTI_Line = EXTI_Line1; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); GPIO_InitStructure.GPIO_Pin = RF_CMT2300A_GPIO2_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(RF_CMT2300A_GPIO2_PORT, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1); NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); myIrqCallback_extiLine0.thisCb = extiLine0_callback; EXTILINE0_callbackRegiste(&myIrqCallback_extiLine0); myIrqCallback_extiLine1.thisCb = extiLine1_callback; EXTILINE1_callbackRegiste(&myIrqCallback_extiLine1); } void myRadio_gpio_init(RADIO_GPIO_CALLBACK cb) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = BOARD_PIN_SPI_MISO; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BOARD_PORT_SPI_MISO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = BOARD_PIN_SPI_CLK; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BOARD_PORT_SPI_CLK, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = BOARD_PIN_SPI_CSN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BOARD_PORT_SPI_CSN, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = RF_CMT2300A_GPIO1_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RF_CMT2300A_GPIO1_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = RF_CMT2300A_GPIO2_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RF_CMT2300A_GPIO2_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = RF_CMT2300A_GPIO3_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RF_CMT2300A_GPIO3_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = RF_CMT2300A_FCSB_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RF_CMT2300A_FCSB_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = RF_EXTPA_RE_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RF_EXTPA_RE_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = RF_EXTPA_TE_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RF_EXTPA_TE_PORT, &GPIO_InitStructure); BOARD_SPI_NSS_H(); myRadio_gpio_irq_init(); if (cb) { gpioCallback = cb; } } uint8_t myRadioSpi_read(void) { uint8_t i = 0, temp = 0; SET_BOARD_SPI_MISO_IN(); BOARD_SPI_SCK_L(); // myRadio_delayUs(1); for(i = 0; i < 8; i ++) { BOARD_SPI_SCK_H(); // myRadio_delayUs(1); temp <<= 1; if(READ_BOARD_SPI_MISO()) { temp ++; } BOARD_SPI_SCK_L(); // myRadio_delayUs(1); } return temp; } void myRadioSpi_write(uint8_t byteToWrite) { uint8_t i = 0; BOARD_SPI_SCK_L(); for(i = 0; i < 8; i ++) { if(byteToWrite & 0x80) { BOARD_SPI_MISO_H(); } else { BOARD_SPI_MISO_L(); } BOARD_SPI_SCK_H(); // myRadio_delayUs(1); byteToWrite <<= 1; BOARD_SPI_SCK_L(); // myRadio_delayUs(1); } }