Job_SignsPads/STM32/Code/STM32F405/SYSTEM/sys.c

109 lines
2.0 KiB
C
Raw Normal View History

2025-04-22 02:29:37 +00:00
/*
* @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;
}