b49c9ab0c6
完整实现了以下模块: - 系统数据总线(sys_data_bus)模块间通信 - UART/USART/LPUART驱动 + RS485半双工 - I2C驱动(AS5600角度传感器 + AT24C02 EEPROM) - Modbus RTU从站协议 - 步进电机微步进控制(正弦/余弦换相+S曲线加减速) - 到位开关驱动(DI_MIN/DI_MAX) - PGA+ADC电流检测 - 系统监控任务(内存/串口/传感器/任务状态) - LED/Key外设驱动 - 基于CMake + arm-none-eabi-gcc构建系统
69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
#include "system_py32md530.h"
|
|
#include "py32md530.h"
|
|
|
|
uint32_t SystemCoreClock = 8000000UL;
|
|
|
|
static void HSI_Setup(void)
|
|
{
|
|
RCC->CR |= ((uint32_t)RCC_CR_HSION);
|
|
while ((RCC->CR & RCC_CR_HSIRDY) == 0);
|
|
}
|
|
|
|
static void PLL_Setup(void)
|
|
{
|
|
RCC->CFGR &= ~RCC_CFGR_PLLSRC;
|
|
RCC->CFGR |= RCC_CFGR_PLLSRC;
|
|
|
|
RCC->CFGR2 &= ~RCC_CFGR2_PLLMUL;
|
|
RCC->CFGR2 |= RCC_CFGR2_PLLMUL9;
|
|
|
|
RCC->CR |= RCC_CR_PLLON;
|
|
while ((RCC->CR & RCC_CR_PLLRDY) == 0);
|
|
}
|
|
|
|
static void Flash_Setup(void)
|
|
{
|
|
#define FLASH_ACR_LATENCY_Pos 0
|
|
#define FLASH_ACR_LATENCY_Msk (0x1UL << FLASH_ACR_LATENCY_Pos)
|
|
#define FLASH_ACR_PRFTBE_Pos 4
|
|
#define FLASH_ACR_PRFTBE_Msk (0x1UL << FLASH_ACR_PRFTBE_Pos)
|
|
|
|
uint32_t acr = *((uint32_t *)0x40022000);
|
|
acr |= FLASH_ACR_LATENCY_Msk;
|
|
acr |= FLASH_ACR_PRFTBE_Msk;
|
|
*((uint32_t *)0x40022000) = acr;
|
|
}
|
|
|
|
void SystemInit(void)
|
|
{
|
|
HSI_Setup();
|
|
PLL_Setup();
|
|
Flash_Setup();
|
|
|
|
RCC->CFGR &= ~RCC_CFGR_SW;
|
|
RCC->CFGR |= RCC_CFGR_SW_PLL;
|
|
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);
|
|
|
|
SystemCoreClock = 72000000UL;
|
|
|
|
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
|
|
}
|
|
|
|
void SystemCoreClockUpdate(void)
|
|
{
|
|
uint32_t tmp;
|
|
tmp = RCC->CFGR & RCC_CFGR_SWS;
|
|
|
|
switch (tmp) {
|
|
case RCC_CFGR_SWS_HSI:
|
|
SystemCoreClock = 8000000UL;
|
|
break;
|
|
case RCC_CFGR_SWS_PLL:
|
|
SystemCoreClock = 72000000UL;
|
|
break;
|
|
default:
|
|
SystemCoreClock = 8000000UL;
|
|
break;
|
|
}
|
|
}
|