109 lines
2.0 KiB
C
109 lines
2.0 KiB
C
|
/*
|
||
|
* @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;
|
||
|
}
|