221 lines
5.8 KiB
C
Raw Permalink Normal View History

2025-02-18 10:13:34 +08:00
#include "user_init.h"
#include "uart.h"
#include "lin.h"
/**
* @brief RCHF配置为系统时钟源
* 32MHz时使
* 8NHz时访(CDIF)
* @param clock: RCHF振荡频率值
* @retval void
*/
void ClockInit(uint32_t clock)
{
FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_2CYCLE);
switch (clock)
{
case FL_CMU_RCHF_FREQUENCY_8MHZ:
FL_CMU_RCHF_WriteTrimValue(RCHF8M_TRIM);
FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
FL_CDIF_SetPrescaler(CDIF, FL_CDIF_PSC_DIV1);
break;
case FL_CMU_RCHF_FREQUENCY_16MHZ:
FL_CMU_RCHF_WriteTrimValue(RCHF16M_TRIM);
FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
FL_CDIF_SetPrescaler(CDIF, FL_CDIF_PSC_DIV2);
break;
case FL_CMU_RCHF_FREQUENCY_24MHZ:
FL_CMU_RCHF_WriteTrimValue(RCHF24M_TRIM);
FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
FL_CDIF_SetPrescaler(CDIF, FL_CDIF_PSC_DIV4);
break;
case FL_CMU_RCHF_FREQUENCY_32MHZ:
FL_CMU_RCHF_WriteTrimValue(RCHF32M_TRIM);
FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
FL_CDIF_SetPrescaler(CDIF, FL_CDIF_PSC_DIV4);
break;
default:
FL_CMU_RCHF_WriteTrimValue(RCHF8M_TRIM);
FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
FL_CDIF_SetPrescaler(CDIF, FL_CDIF_PSC_DIV1);
break;
}
FL_CMU_RCHF_SetFrequency(clock);
FL_CMU_SetSystemClockSource(FL_CMU_SYSTEM_CLK_SOURCE_RCHF);
}
/**
* @brief IO配置:
* XTLFRCLPRCHF和AHB等
* @param void
* @retval void
*/
void FoutInit(void)
{
FL_GPIO_InitTypeDef init = {0};
init.pin = FL_GPIO_PIN_11;
init.mode = FL_GPIO_MODE_DIGITAL;
init.outputType = FL_GPIO_OUTPUT_PUSHPULL;
init.pull = FL_DISABLE;
FL_GPIO_Init(GPIOD, &init);
FL_GPIO_SetFOUT0(GPIO, FL_GPIO_FOUT0_SELECT_AHBCLK_DIV64);
}
#ifndef MFANG
#ifdef __CC_ARM
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
#endif
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
/**
* @brief Debug输出串口配置
* @param void
* @retval void
*/
/**
* @brief LED配置
* @param void
* @retval void
*/
void LedInit(void)
{
uint8_t count = 5;
FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
FL_GPIO_ResetOutputPin(LED0_GPIO, LED0_PIN);
FL_GPIO_ResetOutputPin(LED1_GPIO, LED1_PIN);
FL_GPIO_ResetOutputPin(LED2_GPIO, LED2_PIN);
FL_GPIO_ResetOutputPin(LED3_GPIO, LED3_PIN);
GPIO_InitStruct.pin = LED0_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
FL_GPIO_Init(LED0_GPIO, &GPIO_InitStruct);
GPIO_InitStruct.pin = LED1_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
FL_GPIO_Init(LED1_GPIO, &GPIO_InitStruct);
GPIO_InitStruct.pin = LED2_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
FL_GPIO_Init(LED2_GPIO, &GPIO_InitStruct);
GPIO_InitStruct.pin = LED3_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
FL_GPIO_Init(LED3_GPIO, &GPIO_InitStruct);
FL_GPIO_SetOutputPin(LED_R_GPIO, LED_R_PIN);
FL_GPIO_SetOutputPin(LED_G_GPIO, LED_G_PIN);
FL_GPIO_SetOutputPin(LED_B_GPIO, LED_B_PIN);
GPIO_InitStruct.pin = LED_R_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
FL_GPIO_Init(LED_R_GPIO, &GPIO_InitStruct);
GPIO_InitStruct.pin = LED_G_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
FL_GPIO_Init(LED_G_GPIO, &GPIO_InitStruct);
GPIO_InitStruct.pin = LED_B_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
FL_GPIO_Init(LED_B_GPIO, &GPIO_InitStruct);
2025-02-19 13:21:11 +08:00
2025-02-18 10:13:34 +08:00
}
#endif
/**
* @brief XTHF
* @param void
* @retval void
*/
void Clockchange(void)
{
FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
/* PC2.3配置成模拟功能外接XTHF */
GPIO_InitStruct.pin = FL_GPIO_PIN_2 | FL_GPIO_PIN_3;
GPIO_InitStruct.mode = FL_GPIO_MODE_ANALOG;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
GPIO_InitStruct.remapPin = FL_DISABLE;
FL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* 使能XTHF */
FL_CMU_XTHF_Enable();
FL_CMU_XTHF_WriteDriverStrength(0x1F); /* 振荡强度最大 */
FL_DelayMs(3);
FL_CMU_SetSystemClockSource(FL_CMU_SYSTEM_CLK_SOURCE_XTHF);
FL_CMU_SetAHBPrescaler(FL_CMU_AHBCLK_PSC_DIV1);
FL_CMU_SetAPBPrescaler(FL_CMU_APBCLK_PSC_DIV1);
}
/**
* @brief NVIC中断关闭
* @param void
* @retval void
*/
void Close_And_ClearIRQ(IRQn_Type IRQn)
{
NVIC_DisableIRQ(IRQn);
NVIC_ClearPendingIRQ(IRQn);
}
/**
* @brief
* @param void
* @retval void
*/
void UserInit(void)
{
#ifndef MFANG
#if (MAIN_CLOCK == 16000000)
ClockInit(FL_CMU_RCHF_FREQUENCY_16MHZ);
#elif (MAIN_CLOCK == 24000000)
ClockInit(FL_CMU_RCHF_FREQUENCY_24MHZ);
#elif (MAIN_CLOCK == 32000000)
ClockInit(FL_CMU_RCHF_FREQUENCY_32MHZ);
#endif
LedInit();
2025-02-19 13:21:11 +08:00
LED3_OFF();
2025-02-18 10:13:34 +08:00
#endif
}