Struggling with UART

This commit is contained in:
StefansE
2026-03-28 10:00:00 +01:00
parent e6e97f0412
commit 2c4eedfc60
4 changed files with 32 additions and 26 deletions

View File

@@ -14,7 +14,6 @@ typedef enum {
com_WhoAmI, com_WhoAmI,
com_setTime, com_setTime,
com_getTime, com_getTime,
com_setLedOffset,
com_setColour_hour, com_setColour_hour,
com_setColour_minute, com_setColour_minute,
com_setColour_second, com_setColour_second,
@@ -31,7 +30,6 @@ void cmd_RunCommand(commands_e cmd, uint32_t * input);
void cmd_WhoAmI(uint32_t); void cmd_WhoAmI(uint32_t);
void cmd_SetTime(uint32_t time); void cmd_SetTime(uint32_t time);
void cmd_SetOffsetDiode(uint32_t diode);
void cmd_GetTime(uint32_t time); void cmd_GetTime(uint32_t time);
void cmd_setColour_hour(uint32_t colour); void cmd_setColour_hour(uint32_t colour);
void cmd_setColour_minute(uint32_t colour); void cmd_setColour_minute(uint32_t colour);

View File

@@ -10,13 +10,9 @@
// define LED marking 12:00 or 00:00 // define LED marking 12:00 or 00:00
__attribute__((section(".noinit"))) volatile uint8_t ledOffset = 0; #define LED_OFFSET 10
void clock_LedOffset(uint8_t offset){
ledOffset = offset;
}
uint8_t clock_convert_hours(uint8_t hours){ uint8_t clock_convert_hours(uint8_t hours){
int8_t h = 0; int8_t h = 0;
@@ -32,7 +28,7 @@ uint8_t clock_convert_hours(uint8_t hours){
h = hours; h = hours;
} }
led = 2 * h + ledOffset; led = 2 * h + LED_OFFSET;
if(led > 23){ if(led > 23){
led -= 24; led -= 24;
} }
@@ -50,7 +46,7 @@ uint8_t clock_convert_min_sec(uint8_t min_sec){
if(min_sec < 60){ if(min_sec < 60){
led = (float) min_sec/(60/24); led = (float) min_sec/(60/24);
led += ledOffset; led += LED_OFFSET;
if(led > 23){ if(led > 23){
led -= 24; led -= 24;
} }

View File

@@ -50,6 +50,9 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
// RTC container
ds1307_dev_t my_rtc;
extern uint8_t UART_RxBuf[6]; extern uint8_t UART_RxBuf[6];
/* USER CODE END PV */ /* USER CODE END PV */
@@ -108,8 +111,7 @@ int main(void)
// RTC config // RTC config
ds1307_init(); ds1307_init();
ds1307_dev_t my_rtc; // ds1307_config(0, 10, 19, THURSDAY, 26, MARCH, 2026, +1, 33);
ds1307_config(0, 10, 19, THURSDAY, 26, MARCH, 2026, +1, 33);
/* USER CODE END 2 */ /* USER CODE END 2 */
@@ -146,7 +148,7 @@ uint8_t UART_Buff[] = "Hello World\n";
HAL_GPIO_TogglePin(LED_Green_GPIO_Port, LED_Green_Pin); HAL_GPIO_TogglePin(LED_Green_GPIO_Port, LED_Green_Pin);
HAL_UART_Transmit(&huart2, UART_Buff, sizeof(UART_Buff), 1000); //HAL_UART_Transmit(&huart2, UART_Buff, sizeof(UART_Buff), 1000);
HAL_Delay(1000); HAL_Delay(1000);

View File

@@ -10,6 +10,8 @@
#include "usart.h" #include "usart.h"
#include "clock.h" #include "clock.h"
#include "stdio.h"
#include "ds1307.h" #include "ds1307.h"
typedef struct { typedef struct {
@@ -35,22 +37,11 @@ void (*commands[])(uint32_t) = {
cmd_WhoAmI, cmd_WhoAmI,
cmd_SetTime, cmd_SetTime,
cmd_GetTime, cmd_GetTime,
cmd_SetOffsetDiode,
cmd_setColour_hour, cmd_setColour_hour,
cmd_setColour_minute, cmd_setColour_minute,
cmd_setColour_second cmd_setColour_second
}; };
void cmd_SetOffsetDiode(uint32_t diode){
uint8_t offset = (uint8_t) diode;
clock_LedOffset(offset);
HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
cmd_UART_Request(); cmd_UART_Request();
@@ -63,9 +54,9 @@ void cmd_UART_Request(void){
cmd_RunCommand((uint8_t) msg->cmdId, (uint32_t*) &msg->bytes); cmd_RunCommand((uint8_t) msg->cmdId, (uint32_t*) &msg->bytes);
HAL_UART_Transmit(&huart2, (uint8_t*) msg, sizeof(*msg), 1000); // HAL_UART_Transmit(&huart2, (uint8_t*) msg, sizeof(*msg), 1000);
HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000); // HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
} }
@@ -102,7 +93,26 @@ void cmd_SetTime(uint32_t time){
} }
void cmd_GetTime(uint32_t time){} void cmd_GetTime(uint32_t time){
extern ds1307_dev_t my_rtc;
uint8_t msg[6] = {0};
uint8_t resp[] = "Hello Ewaryst\n";
// sprintf(resp, "%d, %d, %d, \n", my_rtc.hours, my_rtc.minutes, my_rtc.seconds);
msg[0] = com_getTime + 200;
msg[1] = my_rtc.hours;
msg[2] = my_rtc.minutes;
msg[3] = my_rtc.seconds;
msg[4] = 251;
msg[5] = 44;
HAL_UART_Transmit(&huart2, resp, sizeof(resp), 1000);
}
void cmd_setColour_hour(uint32_t colour){ void cmd_setColour_hour(uint32_t colour){