/** * @brief Example main entry point. * @par Parameters: * None * @retval * None */ void main(void) { /* Initialize I/Os in Output Mode for LEDs */ GPIO_Init(LEDS_PORT, LED1_PIN | LED2_PIN, GPIO_MODE_OUT_PP_LOW_FAST); /* Initialize I/O in Input Mode with Interrupt for button and joystick */ /* Button */ GPIO_Init(BUTTON_PORT, BUTTON_PIN, GPIO_MODE_IN_FL_IT); /* Joystick */ GPIO_Init(JOYSTICK_PORT, JOYSTICK_DOWN_PIN, GPIO_MODE_IN_FL_IT); /* Initialize the Interrupt sensitivity for button and joystick */ EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_LOW); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_LOW); /* Change the software priority between button and joystick: - By hardware the PORTB (joystick) has a higher priority than PORTC (button) - We configure the PORTC (button) to have a higher sw priority than PORTB (joystick) */ ITC_SetSoftwarePriority(ITC_IRQ_PORTB, ITC_PRIORITYLEVEL_1); /* joystick */ ITC_SetSoftwarePriority(ITC_IRQ_PORTC, ITC_PRIORITYLEVEL_2); /* button = higher sw priority */ enableInterrupts(); /* LEDs are ON together */ GPIO_WriteHigh(LEDS_PORT, (LED1_PIN | LED2_PIN)); while (1); }
void BPs_IT_enable(char b) { if ( b != 0) { SET(GPIOD->CR2, GPIO_PIN_7, ENABLE); // BP1 SET(GPIOE->CR2, GPIO_PIN_7, ENABLE); // BP2 // GPIOD->CR2 |= CONF(GPIO_PIN_7, ENABLE); // BP1 // GPIOE->CR2 |= CONF(GPIO_PIN_7, ENABLE); // BP2 EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_RISE_ONLY); // BP1 EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOE, EXTI_SENSITIVITY_RISE_ONLY); // BP2 // EXTI_SENSITIVITY_FALL_LOW : Interrupt on Falling edge and Low level // EXTI_SENSITIVITY_RISE_ONLY : Interrupt on Rising edge only // EXTI_SENSITIVITY_FALL_ONLY : Interrupt on Falling edge only // EXTI_SENSITIVITY_RISE_FALL : Interrupt on Rising and Falling edges } else { SET(GPIOD->CR2, GPIO_PIN_7, DISABLE); // BP1 SET(GPIOE->CR2, GPIO_PIN_7, DISABLE); // BP2 // GPIOD->CR2 |= CONF(GPIO_PIN_7, DISABLE); // BP1 // GPIOE->CR2 |= CONF(GPIO_PIN_7, DISABLE); // BP2 } }
void GPIO_Config_Init(void) { /* Initialize I/Os in Output Mode */ GPIO_Init(GPIOE, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST); //滤网指示灯 GPIO_Init(GPIOF, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST); //网络指示灯 GPIO_Init(GPIOF, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); //风扇电源 GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST); //GPRS电源 GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); //电池转12V GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST); //负离子 GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST); //PM2.5 LED GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST); //PM2.5电源 GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_IT); //DC输入 GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_IN_PU_IT); //霍尔开关 GPIO_Init(GPIOE, GPIO_PIN_0, GPIO_MODE_IN_PU_NO_IT); //滤网复位 GPIO_Init(GPIOE, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT); //触摸开关 // BitStatus bit_status; // bit_status = GPIO_ReadInputPin(GPIOB, GPIO_PIN_7); //DC输入 // if (bit_status == RESET) //SET or RESET // DeviceStatus.FN_Status |= PWOER_MODE; // else // DeviceStatus.FN_Status &= ~PWOER_MODE; // // bit_status = GPIO_ReadInputPin(GPIOD, GPIO_PIN_0); //霍尔开关 // if (bit_status == RESET) //SET or RESET // { // FAN_POWER_ON; // DeviceStatus.PW_Status |= FAN_POWER; // DeviceStatus.DS_Status &= ~CAP_OPEN; // } // else // { // FAN_POWER_OFF; // DeviceStatus.PW_Status &= ~FAN_POWER; // DeviceStatus.DS_Status |= CAP_OPEN; // } // // FAN_SPEED_OFF; // if(((DeviceStatus.FN_Status & BATTERY_LEVELS) != BATTERY_LEVEL_0) || (DeviceStatus.FN_Status & PWOER_MODE)) //不是低电状态 or DC供电 // { // D12_POWER_ON; // NET_POWER_ON; // PM_POWER_ON; // DeviceStatus.PW_Status |= (D12_POWER | NET_POWER | PM_POWER); // } // else // { // DeviceStatus.PW_Status &= ~(D12_POWER | NET_POWER | PM_POWER); // } D12_POWER_ON; NET_POWER_ON; PM_POWER_ON; // FAN_POWER_ON; /* Initialize the Interrupt sensitivity */ EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_RISE_FALL); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_RISE_FALL); }
void EXTI_INIT(void) { EXTI_DeInit(); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_RISE_FALL); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_RISE_FALL); }
void gpio_init(void) { GPIO_Init(GPIOC,GPIO_PIN_3, GPIO_MODE_IN_PU_IT); /*GDO0*/ GPIO_Init(GPIOD,GPIO_PIN_3, GPIO_MODE_IN_PU_IT); /*Mode_switch*/ EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY); /*GDO0 Interrupt*/ EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_FALL_ONLY); /*Mode_switch Interrupt*/ EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY); }
//----------------------------------------------------------------------- void initTxRx(void) { GPIO_Init(TxRxPort, TX, GPIO_MODE_OUT_PP_LOW_SLOW); GPIO_Init(TxRxPort, RX, GPIO_MODE_IN_PU_IT); //开接收中断 EXTI_SetExtIntSensitivity(ExtiRxPort, EXTI_SENSITIVITY_RISE_ONLY); EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_RISE_ONLY); }
/** * @brief Main program. * @param None * @retval None */ void main(void) { /* GPIO Configuration -----------------------------------------*/ GPIO_Config(); /* Initialize the Interrupt sensitivity */ EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY); EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY); enableInterrupts(); while (1) { /* The LED toggles in the interrupt routines */ } }
/** * @brief Example main entry point. * @par Parameters: * None * @retval * None */ void main(void) { /* Initialize SPI for LCD */ SPI_DeInit(); SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_128, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_SOFT, 0x07); SPI_Cmd(ENABLE); /* Configure GPIO used to drive the joystick JOYSTICK_UP --> PB6 JOYSTICK_DOWN --> PB7 JOYSTICK_LEFT --> PB4 */ GPIO_Init(GPIOB, GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_7, GPIO_MODE_IN_FL_IT); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_LOW); enableInterrupts(); /* Initialize LCD */ LCD_Init(); /* Clear LCD lines */ LCD_Clear(); LCD_Backlight(ENABLE); LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, "Clock Selection"); LCD_PrintString(LCD_LINE2, ENABLE, DISABLE, " Use joystick"); CLK_DeInit(); CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); /* Output Fcpu on CLK_CCO pin */ CLK_CCOConfig(CLK_OUTPUT_MASTER); while (1) { } }
// 初始化GPIO void system_config_gpio_config(void) { // STM8S105K6 没有PB6 PB7 所以使用 PB2 PB3代替 GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOC); GPIO_DeInit(GPIOD); // GPIO_DeInit(GPIOE); // 中断引脚 没用到中断 只用到了电平判断 // GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT); GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_IT); // GIO0 EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_RISE_ONLY); // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY); GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); // CE SX1278 - RST GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); // CS GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); // SCK GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); // SDI GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT); // SDO // 插座状态 和 插座继电器控制 GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST); // 是否收到信号 状态 GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); // 继电器 必须设置为低电平 否则会一上电 继电器就是开的状态 GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_IN_PU_IT); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_RISE_FALL); // EXTI_SENSITIVITY_RISE_ONLY); // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_RISE_ONLY); #if 0 GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOC); GPIO_DeInit(GPIOD); // GPIO_DeInit(GPIOE); // 中断引脚 没用到中断 只用到了电平判断 // GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT); GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_IT); // GIO0 EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_RISE_ONLY); // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY); GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); // CE SX1278 - RST GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); // CS GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); // SCK GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); // SDI GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT); // SDO // 插座状态 和 插座继电器控制 GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST); // 是否收到信号 状态 GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST); // 继电器 必须设置为低电平 否则会一上电 继电器就是开的状态 // GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT); // 按键 每按一次 翻转一次 GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_IT); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_RISE_FALL); // EXTI_SENSITIVITY_RISE_ONLY); // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_RISE_ONLY); //GPIO_WriteHigh(GPIOB, GPIO_PIN_6); //GPIO_WriteLow(GPIOB, GPIO_PIN_6); GPIO_WriteHigh(GPIOD, GPIO_PIN_0); GPIO_WriteLow(GPIOD, GPIO_PIN_0); GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT); // SDO while(1) { if (GPIO_ReadInputPin( GPIOB, GPIO_PIN_7 )) { printf("a"); } else { printf("b"); } } #endif #if 0 GPIO_DeInit(GPIOA); GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOC); GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOE); GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); //RESET GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); //SCK GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT); //SDO GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); //SDI GPIO_Init(GPIOF, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); //CS GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT); //GIO0 EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC,EXTI_SENSITIVITY_RISE_ONLY); // Interrupt on Rising edge only EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY); GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); // 继电器 GPIO_Init(GPIOD, GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST); // 是否收到信号 GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT); // 按键 每按一次 翻转一次 #endif }
/** * @brief Validation firmware main entry point. * @par Parameters: * None * @retval * None */ void main(void) { int ButtonIndex =0; u8 i =0; u8 LedState =1; u8 pos =0; u8 s[16]; /* Initialize I/Os in Output Mode for LEDs */ GPIO_Init(LEDS_PORT, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN,GPIO_MODE_OUT_PP_LOW_FAST); /* Initialization of I/O in Input Mode with Interrupt for Key button */ GPIO_Init(BUTTON_PORT, BUTTON_PIN, GPIO_MODE_IN_FL_IT); /* Initialization of the Interrupt sensitivity */ EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY); /* Enable general interrupts for Key button reading */ enableInterrupts(); /* Initialize SPI */ SPI_DeInit(); SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_128, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_SOFT, 0x07); SPI_Cmd(ENABLE); /* Initialize LCD */ LCD_Init(); /* Clear LCD lines */ LCD_Clear(); /* Display "moving" ST logo on first line */ for (pos = 0x80; pos < 0x88; pos++) { LCD_Clear(); LCD_DisplayLogo(pos); Delay(20000); } /* Display "moving" ST logo on second line */ for (pos = 0x90; pos < 0x98; pos++) { LCD_Clear(); LCD_DisplayLogo(pos); Delay(20000); } LCD_Clear(); /* More than 15 characters: the message is displayed on 2 lines */ /* LCD_PrintMsg("STM8S - SPI/LCD example"); */ /* Max 15 characters per line */ LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, " *** STM8S *** "); LCD_PrintString(LCD_LINE2, ENABLE, DISABLE, "SPI-LCD example"); for (i = 0; i < 10; i++) { Delay(0xFFFF); } LCD_Clear(); LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, "Press KEY..."); while (1) { /* Check button status */ if (GetVar_ButtonPressed() == TRUE) /* Button is pressed */ { ButtonPressed = FALSE; LCD_ClearLine(LCD_LINE2); LCD_PrintString(LCD_LINE2, DISABLE, DISABLE, "LED #"); /*Use the sprintf() and LCD_Print() function to print a digit on the LCD */ if (LedState == 0) { sprintf(s,"%d ", ButtonIndex + 1); LCD_Print(s); LCD_SetCursorPos(LCD_LINE2, 4); /* 8th position */ LCD_PrintChar('O'); LCD_PrintChar('F'); LCD_PrintChar('F'); } /*Use the LCD_PrintDec1() function to print a digit on the LCD */ else { LCD_PrintDec1((u8)(ButtonIndex + 1)); /* Display at current cursor position */ LCD_SetCursorPos(LCD_LINE2, 4); /* 8th position */ LCD_PrintChar('O'); LCD_PrintChar('N'); LCD_PrintChar(' '); } switch (ButtonIndex) { case 0: GPIO_WriteReverse(LEDS_PORT, LED1_PIN); ButtonIndex++; break; case 1: GPIO_WriteReverse(LEDS_PORT, LED2_PIN); ButtonIndex++; break; case 2: GPIO_WriteReverse(LEDS_PORT, LED3_PIN); ButtonIndex++; break; default: case 3: GPIO_WriteReverse(LEDS_PORT, LED4_PIN); ButtonIndex = 0; LedState ^= 0x01; break; } } } }
/** * @brief Example main entry point. * @par Parameters: * None * @retval * None */ void main(void) { u8 i = 0; /* Initialization of the clock */ /* Clock divider to HSI/1 */ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); /* Initialization of I/Os in Output Mode */ GPIO_Init(LEDS_PORT, (LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN), GPIO_MODE_OUT_PP_LOW_FAST); /* Initialization of I/O in Input Mode with Interrupt */ GPIO_Init(BUTTON_PORT, BUTTON_PIN, GPIO_MODE_IN_FL_IT); /* Initialization of the Interrupt sensitivity */ EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY); /* BEEP calibration */ BEEP_LSICalibrationConfig(LSIMeasurment()); GPIO_Write(LEDS_PORT, (LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN)); /* All LEDs ON */ /* Initialize SPI for LCD */ SPI_DeInit(); SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_128, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_SOFT, 0x07); SPI_Cmd(ENABLE); /* Initialize LCD */ LCD_Init(); /* Clear LCD lines */ LCD_Clear(); /* Enable general interrupts for Key button reading */ enableInterrupts(); LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, " BEEPER OFF"); LCD_PrintString(LCD_LINE2, ENABLE, DISABLE, " Press Key"); while (1) { /* Check button status */ if (ButtonPressed == TRUE) /* Button is pressed */ { ButtonPressed = FALSE; /* Change BEEP frequency */ switch (i) { case 0: BEEP_Cmd(DISABLE); Delay(100); BEEP_Init(BEEP_FREQUENCY_1KHZ); BEEP_Cmd(ENABLE); GPIO_Write(LEDS_PORT, LED1_PIN); /* LED1 ON */ LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, " BEEPER 1kHz"); i = 1; break; case 1: BEEP_Cmd(DISABLE); Delay(100); BEEP_Init(BEEP_FREQUENCY_2KHZ); BEEP_Cmd(ENABLE); GPIO_Write(LEDS_PORT, LED2_PIN); /* LED2 ON */ LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, " BEEPER 2kHz"); i = 2; break; case 2: BEEP_Cmd(DISABLE); Delay(100); BEEP_Init(BEEP_FREQUENCY_4KHZ); BEEP_Cmd(ENABLE); GPIO_Write(LEDS_PORT, LED3_PIN); /* LED3 ON */ LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, " BEEPER 4kHz"); i = 3; break; case 3: BEEP_Cmd(DISABLE); GPIO_Write(LEDS_PORT, LED4_PIN); /* LED4 ON */ LCD_PrintString(LCD_LINE1, ENABLE, DISABLE, " BEEPER OFF"); i = 0; break; default: break; } } } }
int main( void ) { RF24L01_init(); uint8_t tx_addr[5] = {0x04, 0xAD, 0x45, 0x98, 0x51}; uint8_t rx_addr[5] = {0x44, 0x88, 0xBA, 0xBE, 0x42}; RF24L01_setup(tx_addr, rx_addr, 12); RF24L01_set_mode_TX(); //IRQ GPIO_Init( GPIOC, GPIO_PIN_2, GPIO_MODE_IN_FL_IT ); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY); enableInterrupts(); to_send.op1 = 1; to_send.op2 = 1; while(1) { //Prepare the buffer to send from the data_to_send struct uint8_t buffer_to_send[32]; uint8_t i = 0; for (i=0; i<32; i++) { buffer_to_send[i] = 0; } *((data_to_send *) &buffer_to_send) = to_send; //Send the buffer mutex = 0; RF24L01_set_mode_TX(); RF24L01_write_payload(buffer_to_send, 32); //Wait for the buffer to be sent while(!mutex); if (mutex != 1) { //The transmission failed } //Wait for the response //TODO: implement a timeout if nothing is received after a certain amount of time mutex = 0; RF24L01_set_mode_RX(); while(!mutex); if (mutex == 1) { uint8_t recv_data[32]; RF24L01_read_payload(recv_data, 32); received = *((data_received *) &recv_data); asm("nop"); //Place a breakpoint here to see memory } else { //Something happened } //Let's vary the data to send to_send.op1++; to_send.op2 += 2; } }