#include "init.h" #include #include void Delay(volatile uint32_t nCount) { while(nCount--) {} } volatile uint8_t is_blinking_1 = 0; volatile uint8_t is_blinking_2 = 0; volatile uint8_t is_blinking_3 = 0; volatile uint8_t is_blinking_4 = 0; volatile uint32_t timer_ms_1 = 0; volatile uint32_t timer_ms_2 = 0; volatile uint32_t timer_ms_3 = 0; volatile uint32_t timer_ms_4 = 0; volatile uint8_t btn_prev = 0; // Переопределение fputc для работы printf через UART struct __FILE { int handle; }; FILE __stdout; int fputc(int ch, FILE *f) { USART_SendData(USART2, (uint8_t)ch); while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET){} return ch; } void SysTick_Handler(void) { if (is_blinking_1) { timer_ms_1++; if (timer_ms_1 >= 500) { GPIO_ToggleBits(GPIOB, GPIO_Pin_12); timer_ms_1 = 0; } } else { GPIO_ResetBits(GPIOB, GPIO_Pin_12); } if (is_blinking_2) { timer_ms_2++; if (timer_ms_2 >= 500) { GPIO_ToggleBits(GPIOB, GPIO_Pin_13); timer_ms_2 = 0; } } else { GPIO_ResetBits(GPIOB, GPIO_Pin_13); } if (is_blinking_3) { timer_ms_3++; if (timer_ms_3 >= 500) { GPIO_ToggleBits(GPIOB, GPIO_Pin_14); timer_ms_3 = 0; } } else { GPIO_ResetBits(GPIOB, GPIO_Pin_14); } if (is_blinking_4) { timer_ms_4++; if (timer_ms_4 >= 500) { GPIO_ToggleBits(GPIOB, GPIO_Pin_15); timer_ms_4 = 0; } } else { GPIO_ResetBits(GPIOB, GPIO_Pin_15); } } void USART2_SendChar(char ch) { while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, (uint16_t)ch); } char USART2_ReadChar(void) { while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET); return (char)USART_ReceiveData(USART2); } void USART2_SendString(char* str) { while (*str) { USART2_SendChar(*str++); } } void led_status(char led_num) { uint8_t is_blinking = 0; char led_name[5] = "LED0"; switch (led_num) { case 1: is_blinking = is_blinking_1; break; case 2: is_blinking = is_blinking_2; break; case 3: is_blinking = is_blinking_3; break; case 4: is_blinking = is_blinking_4; break; } led_name[3] = led_num + '0'; // led_name[3] = '0'; if (is_blinking) { USART2_SendString(led_name); USART2_SendString(" Status: BLINKING\r\n"); printf("LED Status: BLINKING\r\n"); } else { USART2_SendString(led_name); USART2_SendString(" Status: STOPPED\r\n"); printf("LED Status: STOPPED\r\n"); } } int main(void) { LEDs_ini(); Button_ini(); USART2_ini(); SysTick_Config(SystemCoreClock / 1000); USART2_SendChar('o'); while(1) { // // uint8_t btn_curr = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10); // GPIO_SetBits(GPIOB, GPIO_Pin_12); char receive = USART2_ReadChar(); receive = receive & 0x7F; // USART2_SendChar(receive); // GPIO_SetBits(GPIOB, GPIO_Pin_12); // char buff[256]; // sprintf(buff, "-- 0x%02hhX --\n", receive); // USART2_SendString(buff); switch (receive) { case '1': is_blinking_1 = !is_blinking_1; led_status(1); break; case '2': is_blinking_2 = !is_blinking_2; led_status(2); break; case '3': is_blinking_3 = !is_blinking_3; led_status(3); break; case '4': is_blinking_4 = !is_blinking_4; led_status(4); break; default: // USART2_SendChar('r'); break; } // // if (btn_curr == 1 && btn_prev == 0) { // // is_blinking = !is_blinking; // // if (is_blinking) { // // USART2_SendString("LED Status: BLINKING\r\n"); // // printf("LED Status: BLINKING\r\n"); // // } else { // // USART2_SendString("LED Status: STOPPED\r\n"); // // printf("LED Status: STOPPED\r\n"); // // } // // Delay(200000); // // } // // btn_prev = btn_curr; } }