初始化仓库

This commit is contained in:
2025-08-31 21:37:24 +08:00
commit 7477a25070
45 changed files with 22852 additions and 0 deletions

200
Source/clock_init.c Normal file
View File

@@ -0,0 +1,200 @@
#include "clock_init.h"
#include "delay.h"
#include "uart.h"
//22.11MHz的IRC参数寄存器 0xFB
//24MHz的IRC参数寄存器 0xFB
#define IRC_22M (*((uint8 idata*)0xFA))
#define IRC_24M (*((uint8 idata*)0xFB))
//内核频率
int32 sys_clk = FOSC;
//-------------------------------------------------------------------------------------------------------------------
// @brief STC32G设置系统频率
// @param NULL 空值
// @return void 系统频率
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
uint32 set_clk(void)
{
P_SW2 |= 0x80;
if(sys_clk == 22118400)
{
//选择 22.1184MHz
CLKDIV = 0x04;
IRTRIM = T22M_ADDR;
VRTRIM = VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV = 0x00;
}
else if(sys_clk == 24000000)
{
//选择 24MHz
CLKDIV = 0x04;
IRTRIM = T24M_ADDR;
VRTRIM = VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV = 0x00;
}
else if(sys_clk == 27000000)
{
//选择 27MHz
CLKDIV = 0x04;
IRTRIM = T27M_ADDR;
VRTRIM = VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV = 0x00;
}
else if(sys_clk == 30000000)
{
//选择 30MHz
CLKDIV = 0x04;
IRTRIM = T30M_ADDR;
VRTRIM = VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV = 0x00;
}
else if(sys_clk == 33177600)
{
//选择 33.1776MHz
CLKDIV = 0x04;
IRTRIM = T33M_ADDR;
VRTRIM = VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV = 0x00;
}
else if(sys_clk == 35000000)
{
//选择 35MHz
CLKDIV = 0x04;
IRTRIM = T35M_ADDR;
VRTRIM = VRT44M_ADDR;
IRCBAND = 0x03;
CLKDIV = 0x00;
}
else
{
sys_clk = 30000000;
//选择 30MHz
CLKDIV = 0x04;
IRTRIM = T30M_ADDR;
VRTRIM = VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV = 0x00;
}
return sys_clk;
}
void board_init(void)
{
EAXFR = 1; // 使能访问XFR
CKCON = 0x00; // 设置外部数据总线为最快
WTST = 0; // 设置程序代码等待参数赋值为0可将CPU执行程序的速度设置为最快
SET_P54_RESRT; // 使P54为复位引脚
P_SW2 = 0x80; // 开启特殊地址访问
#if (1 == EXTERNAL_CRYSTA_ENABLE)
XOSCCR = 0xc0; //启动外部晶振
while (!(XOSCCR & 1)); //等待时钟稳定
CLKDIV = 0x00; //时钟不分频
CLKSEL = 0x01; //选择外部晶振
#else
//自动设置系统频率
#if (0 == FOSC)
sys_clk = set_clk();
#else
sys_clk = FOSC;
#endif
#endif
delay_init(); //延时函数初始化
WTST = 0;
P_SW2 |= 0x80;
CLKDIV = 0; //24MHz主频分频设置
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
ADCCFG = 0;
AUXR = 0;
SCON = 0;
S2CON = 0;
S3CON = 0;
S4CON = 0;
P_SW1 = 0;
IE2 = 0;
TMOD = 0;
P_SW2 |= 0x80;
#if (1 == USE_USB_CDC)
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
USBCLK = 0x00;
USBCON = 0x90;
usb_init();
IE2 |= 0x80;
EA = 1;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
#else
uart_init(DEBUG_UART, DEBUG_UART_RX_PIN, DEBUG_UART_TX_PIN, DEBUG_UART_BAUD, DEBUG_UART_TIM);
#endif
EnableGlobalIRQ();
}
#if (1 == PRINTF_ENABLE)
#if (1==USE_USB_CDC)
#else
//重定义printf 数字 只能输出uint16
char putchar(char c)
{
uart_putchar(DEBUG_UART, c);//把自己实现的串口打印一字节数据的函数替换到这里
return c;
}
#endif
#endif
void DisableGlobalIRQ(void)
{
EA = 0;
}
void EnableGlobalIRQ(void)
{
EA = 1;
}