diff --git a/.settings/stm32cubeide.project.prefs b/.settings/stm32cubeide.project.prefs index c11a0a3..7f626b4 100644 --- a/.settings/stm32cubeide.project.prefs +++ b/.settings/stm32cubeide.project.prefs @@ -1,3 +1,3 @@ 8DF89ED150041C4CBC7CB9A9CAA90856=3B9AC612F80B3672D4AEDF95B2FAE837 -DC22A860405A8BF2F2C095E5B6529F12=B906B5FA0271D057D2544B3C1B4A8DE5 +DC22A860405A8BF2F2C095E5B6529F12=3B9AC612F80B3672D4AEDF95B2FAE837 eclipse.preferences.version=1 diff --git a/Core/Inc/ComsRead.h b/Core/Inc/ComsRead.h new file mode 100644 index 0000000..e41781b --- /dev/null +++ b/Core/Inc/ComsRead.h @@ -0,0 +1,17 @@ +/* + * ComsRead.h + * + * Created on: Mar 29, 2026 + * Author: ewars + */ + +#ifndef INC_COMSREAD_H_ +#define INC_COMSREAD_H_ + +void readColour_Hours(uint8_t * data); +void readColour_Minutes(uint8_t * data); +void readColour_Seconds(uint8_t * data); +void readColour_Background(uint8_t * data); + + +#endif /* INC_COMSREAD_H_ */ diff --git a/Core/Inc/myComms.h b/Core/Inc/myComms.h index 1ddcba9..40a12a3 100644 --- a/Core/Inc/myComms.h +++ b/Core/Inc/myComms.h @@ -16,6 +16,8 @@ typedef enum { com_setColour_minute, com_setColour_second, com_setColour_background, + com_readNV, + com_writeNV, com_MAX_command } commands_e; diff --git a/Core/Inc/ws2812_effect.h b/Core/Inc/ws2812_effect.h index c97665b..02b66fc 100644 --- a/Core/Inc/ws2812_effect.h +++ b/Core/Inc/ws2812_effect.h @@ -16,6 +16,7 @@ void ws_Effect_RoudTheClock(void); void ws_Effect_RandRound(void); void ws_Effect_RandRand(void); +void ws_effect_setDisplayColoursNV(void); void ws_effect_display_time(uint8_t hour, uint8_t minute, uint8_t second); void ws_effect_display_hour(uint8_t hour); diff --git a/Core/Src/clock.c b/Core/Src/clock.c index ead2dcc..290ea27 100644 --- a/Core/Src/clock.c +++ b/Core/Src/clock.c @@ -10,7 +10,7 @@ // define LED marking 12:00 or 00:00 -#define LED_OFFSET 11 +#define LED_OFFSET 12 void clock_update(ds1307_dev_t *ds1307_dev){ diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 1d6068c..a77679f 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -44,7 +44,7 @@ void MX_DMA_Init(void) /* DMA interrupt init */ /* DMA1_Channel5_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0); + HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 6, 0); HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); } diff --git a/Core/Src/ds1307.c b/Core/Src/ds1307.c index e9ed2fa..6e84651 100644 --- a/Core/Src/ds1307.c +++ b/Core/Src/ds1307.c @@ -42,6 +42,58 @@ static uint8_t ds1307_read_byte(uint8_t ds1307_reg_addres); static uint8_t ds1307_bcd_decode(uint8_t data); static uint8_t ds1307_bcd_encode(uint8_t data); +/* + * + Function designed to read embedded RAM data. + Address range 0x08 to 0x3F + 56 bytes of data + + addr: address of data to read 0x08 to 0x3F + data: pointer to data + len: number of bytes of data to read + + */ + +uint8_t ds1307_read_user_RAM(uint8_t addr, uint8_t * data, uint8_t len){ + + HAL_StatusTypeDef status = HAL_OK; + + for(uint8_t i = 0; i < len; i++){ + uint8_t resp = ds1307_read_byte(addr + i); + *(data + i) = resp; + } + + return status; +} + +/* + * + Function designed to write embedded RAM data. + Address range 0x08 to 0x3F + 56 bytes of data + + addr: address of data to read 0x08 to 0x3F + data: pointer to data + len: number of bytes of data to read + + */ + +uint8_t ds1307_write_user_RAM(uint8_t addr, uint8_t * data, uint8_t len){ + HAL_StatusTypeDef status = HAL_OK; + uint8_t buff[4] = {0}; + buff[0] = addr; + + for(uint8_t i = 0; i < len; i++){ + + ds1307_write_byte(addr + i, *(data + i)); + HAL_Delay(5); + + } + + + return status; +} + /** * @brief Write byte data from an specific address ds1307 RTC * diff --git a/Core/Src/myComms.c b/Core/Src/myComms.c index e8816bf..5143267 100644 --- a/Core/Src/myComms.c +++ b/Core/Src/myComms.c @@ -12,6 +12,12 @@ #include "clock.h" #include "ds1307.h" + +#define NV_COLOUR_HOURS_ADDR 0x08 +#define NV_COLOUR_MINUTES_ADDR 0x0B +#define NV_COLOUR_SECONDS_ADDR 0x0E +#define NV_COLOUR_BACKGND_ADDR 0x11 + typedef struct { uint8_t cmdId; @@ -25,7 +31,10 @@ typedef struct { uint8_t crc; } uartMessage_s; +static void cmd_readNV(uint32_t data); +static void cmd_writeNV(uint8_t data); +static uint8_t nok[] = "NOK\n"; static uint8_t ok[] = "OK\n"; uint8_t myId[] = "Clock\n"; @@ -38,9 +47,44 @@ void (*commands[])(uint32_t) = { cmd_GetTime, cmd_setColour_hour, cmd_setColour_minute, + cmd_setColour_second, + cmd_setColour_background, + cmd_readNV, + cmd_writeNV, cmd_setColour_second }; +static void cmd_readNV(uint32_t data){ + HAL_StatusTypeDef status = HAL_ERROR; + + uint8_t addr = (uint8_t) data; + uint8_t respBuf[3] = {0}; + + status = ds1307_read_user_RAM(addr, respBuf, sizeof(respBuf)); + + if(HAL_OK == status){ + CDC_Transmit_FS(respBuf, sizeof(respBuf)); + } + else{ + CDC_Transmit_FS(nok, sizeof(nok)); + } +} + +static void cmd_writeNV(uint8_t data){ + HAL_StatusTypeDef status = HAL_ERROR; + + + status = ds1307_write_user_RAM(UART_RxBuf[1], &UART_RxBuf[2], 3); + + if(HAL_OK == status){ + CDC_Transmit_FS(ok, sizeof(ok)); + } + else{ + CDC_Transmit_FS(nok, sizeof(nok)); + } + +} + void setRxFlag(void){ RxComplete_fl = 1; @@ -128,6 +172,15 @@ void cmd_setColour_hour(uint32_t colour){ clock_setColourHours(r, g, b); + uint8_t nv[] = { + NV_COLOUR_HOURS_ADDR, + r, + g, + b + }; + + cmd_writeNV(nv); + CDC_Transmit_FS(ok, sizeof(ok)); } @@ -141,6 +194,16 @@ void cmd_setColour_minute(uint32_t colour){ clock_setColourMinutes(r, g, b); + + uint8_t nv[] = { + NV_COLOUR_MINUTES_ADDR, + r, + g, + b + }; + + cmd_writeNV(nv); + CDC_Transmit_FS(ok, sizeof(ok)); } @@ -154,6 +217,16 @@ void cmd_setColour_second(uint32_t colour){ clock_setColourSeconds(r, g, b); + + uint8_t nv[] = { + NV_COLOUR_SECONDS_ADDR, + r, + g, + b + }; + + cmd_writeNV(nv); + CDC_Transmit_FS(ok, sizeof(ok)); } @@ -167,5 +240,15 @@ void cmd_setColour_background(uint32_t colour){ clock_setColourBackground(r, g, b); + + uint8_t nv[] = { + NV_COLOUR_BACKGND_ADDR, + r, + g, + b + }; + + cmd_writeNV(nv); + CDC_Transmit_FS(ok, sizeof(ok)); } diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 4371bb4..decee41 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -111,7 +111,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) __HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_CC1],hdma_tim2_ch1); /* TIM2 interrupt Init */ - HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); + HAL_NVIC_SetPriority(TIM2_IRQn, 6, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); /* USER CODE BEGIN TIM2_MspInit 1 */ diff --git a/Core/Src/ws2812_effect.c b/Core/Src/ws2812_effect.c index 8839d9a..612bae0 100644 --- a/Core/Src/ws2812_effect.c +++ b/Core/Src/ws2812_effect.c @@ -9,6 +9,13 @@ #include "ws2812_effect.h" //#include "clock.h" #include +#include "ds1307.h" + +#define NV_COLOUR_HOURS_ADDR 0x08 +#define NV_COLOUR_MINUTES_ADDR 0x0B +#define NV_COLOUR_SECONDS_ADDR 0x0E +#define NV_COLOUR_BACKGND_ADDR 0x11 + typedef struct { uint8_t r; @@ -21,6 +28,32 @@ static colour_s colour_minutes = {0, 250, 0}; static colour_s colour_seconds = {0, 0, 250}; static colour_s colour_background = {0, 0, 0}; +void ws_effect_setDisplayColoursNV(void){ + + uint8_t rxBuf[3] = {0}; + + ds1307_read_user_RAM(NV_COLOUR_HOURS_ADDR, rxBuf, 3); + colour_hours.r = rxBuf[0]; + colour_hours.g = rxBuf[1]; + colour_hours.b = rxBuf[2]; + + ds1307_read_user_RAM(NV_COLOUR_MINUTES_ADDR, rxBuf, 3); + colour_minutes.r = rxBuf[0]; + colour_minutes.g = rxBuf[1]; + colour_minutes.b = rxBuf[2]; + + ds1307_read_user_RAM(NV_COLOUR_SECONDS_ADDR, rxBuf, 3); + colour_seconds.r = rxBuf[0]; + colour_seconds.g = rxBuf[1]; + colour_seconds.b = rxBuf[2]; + + ds1307_read_user_RAM(NV_COLOUR_BACKGND_ADDR, rxBuf, 3); + colour_background.r = rxBuf[0]; + colour_background.g = rxBuf[1]; + colour_background.b = rxBuf[2]; + +} + void clock_setColourHours(uint8_t r, uint8_t g, uint8_t b){ colour_hours.r = r; colour_hours.g = g; diff --git a/LedRing.ioc b/LedRing.ioc index 05f2ff8..3374ea7 100644 --- a/LedRing.ioc +++ b/LedRing.ioc @@ -46,10 +46,10 @@ Mcu.PinsNb=13 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C6Tx -MxCube.Version=6.14.0 -MxDb.Version=DB.6.0.140 +MxCube.Version=6.14.1 +MxDb.Version=DB.6.0.141 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true +NVIC.DMA1_Channel5_IRQn=true\:6\:0\:true\:false\:true\:false\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -59,7 +59,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false -NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true +NVIC.TIM2_IRQn=true\:6\:0\:true\:false\:true\:true\:true\:true NVIC.USB_LP_CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false PA0-WKUP.Signal=S_TIM2_CH1_ETR @@ -115,7 +115,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false RCC.ADCFreqValue=36000000 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 @@ -158,3 +158,4 @@ VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS board=custom +isbadioc=false diff --git a/USB_DEVICE/App/usbd_cdc_if.c b/USB_DEVICE/App/usbd_cdc_if.c index 5315c89..78e77e9 100644 --- a/USB_DEVICE/App/usbd_cdc_if.c +++ b/USB_DEVICE/App/usbd_cdc_if.c @@ -256,7 +256,6 @@ static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) * @param Len: Number of data received (in bytes) * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL */ - static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6 */