Files
StepMotorCtrl/libs/device/system_py32md530.c
T
hm b49c9ab0c6 Initial commit: PY32MD530H28U7TR步进电机控制器项目
完整实现了以下模块:
- 系统数据总线(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构建系统
2026-05-11 19:55:43 +08:00

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;
}
}