/* * @Description: * @Version: 1.0 * @Author: lzc * @Date: 2023-01-30 16:10:16 * @LastEditors: lzc * @LastEditTime: 2023-08-15 16:52:44 */ #include "main.h" #include "drv_SGM58031.h" // THUMB指令不支持汇编内联 // 采用如下方法实现执行汇编指令WFI __asm void WFI_SET(void) { WFI; } // 关闭所有中断(但是不包括fault和NMI中断) __asm void INTX_DISABLE(void) { CPSID I BX LR } // 开启所有中断 __asm void INTX_ENABLE(void) { CPSIE I BX LR } // 设置栈顶地址 // addr:栈顶地址 __asm void MSR_MSP(u32 addr) { MSR MSP, r0 // set Main Stack value BX r14 } void System_Init(void) { // SystemInit(); RCC_Configuration(SYSTEM_CLOCK_FRQ); delay_init(SYSTEM_CLOCK_FRQ); uart_init(115200); uart_init_2(115200); TIM2_Int_Init(100 - 1, (SYSTEM_CLOCK_FRQ * 10) - 1); TIM3_Int_Init(100 - 1, (SYSTEM_CLOCK_FRQ * 10) - 1); TIM4_Int_Init(100 - 1, (SYSTEM_CLOCK_FRQ * 10) - 1); TIM5_Int_Init(100 - 1, (SYSTEM_CLOCK_FRQ * 10) - 1); TIM7_Int_Init(100 - 1, (SYSTEM_CLOCK_FRQ * 10) - 1); GPIO_Set_Init(); WIFI_Reset(); EXTI_Set_Init(); ADC_configuration(); EN25QXX_Init(); // SysTick_Init(); // 串口接收IRQ TIM_Cmd(TIM4, ENABLE); // 串口接收IRQ TIM_Cmd(TIM7, ENABLE); } void wait(char num) { for (char i = 0; i < num; i++) { LED_B = 0; delay_ms(100); LED_B = 1; delay_ms(100); } LED_B = 0; USART_RX_Length = 0; // 状态寄存器清空 } uint8_t flashWrite(uint8_t *data, uint_fast8_t length) { static uint8_t buffer; uint16_t temp, i; uint_fast8_t index; uint32_t flashPtr1; if (length == 0) return 0; flashPtr1 = FlashPtr; FLASH_Unlock(); index = 0; do { if (flashPtr1 & 1) { flashPtr1--; temp = buffer; } else { temp = data[index++]; }; temp |= data[index++] << 8; FLASH_ProgramHalfWord(flashPtr1, temp); flashPtr1 += sizeof(uint16_t); } while ((length - index) >= 2); for (i = 0; i < length; i++) // 读出flash校验是否写错 { if (data[i] != *(uint8_t *)(FlashPtr + i)) return 1; // 有错 } FLASH_Lock(); FlashPtr += length; return 0; }