|
|
@@ -190,6 +190,35 @@ uint32_t RTC_CalcDiffSeconds(RTC_DateTimeTypeDef *t1, RTC_DateTimeTypeDef *t2)
|
|
|
return 24*3600 - (s1 - s2); // 跨零点的情况
|
|
|
}
|
|
|
|
|
|
+void Flash_Write_LoraAddr(uint8_t addrH, uint8_t addrL)
|
|
|
+{
|
|
|
+ HAL_FLASH_Unlock();
|
|
|
+
|
|
|
+ // 擦除 1 页(1024字节)
|
|
|
+ FLASH_EraseInitTypeDef eraseInit;
|
|
|
+ uint32_t PageError = 0;
|
|
|
+ eraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
|
|
|
+ eraseInit.PageAddress = FLASH_USER_ADDR;
|
|
|
+ eraseInit.NbPages = 1;
|
|
|
+ HAL_FLASHEx_Erase(&eraseInit, &PageError);
|
|
|
+
|
|
|
+ // 组合两个字节为一个半字(高字节 | 低字节)
|
|
|
+ uint16_t halfword = ((uint16_t)addrH << 8) | addrL;
|
|
|
+
|
|
|
+ // 写入
|
|
|
+ HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_USER_ADDR, halfword);
|
|
|
+
|
|
|
+ HAL_FLASH_Lock();
|
|
|
+}
|
|
|
+
|
|
|
+void Flash_Read_LoraAddr(uint8_t *addrH, uint8_t *addrL)
|
|
|
+{
|
|
|
+ uint16_t halfword = *(uint16_t*)FLASH_USER_ADDR;
|
|
|
+ *addrH = (halfword >> 8) & 0xFF;
|
|
|
+ *addrL = halfword & 0xFF;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
|
|
|
/* USER CODE END 0 */
|
|
|
|
|
|
@@ -232,6 +261,16 @@ int main(void)
|
|
|
|
|
|
powerOn();
|
|
|
E52_CtlPowerOn_Fun();
|
|
|
+
|
|
|
+ deviceInfo.loraDeviceAddress_H = 0xFE;
|
|
|
+ deviceInfo.loraDeviceAddress_L = 0xE1;
|
|
|
+ Flash_Write_LoraAddr(deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
+ uint8_t addrH, addrL;
|
|
|
+ while (TRUE) {
|
|
|
+ Flash_Read_LoraAddr(&addrH, &addrL);
|
|
|
+ printf("LoraAddr: %02X%02X\r\n", addrH, addrL);
|
|
|
+ HAL_Delay(1000);
|
|
|
+ }
|
|
|
// 在需要设置RTC时间的地方直接调用
|
|
|
// 参数依次为:小时、分钟、秒、星期、月份、日期、年份(均为BCD格式)
|
|
|
RTC_SetDateTime(&hrtc,
|