/*************************************************************
*******本项目采用hc32f005c6pa芯片,少引脚够用,低成本,系统启用
*******22.12MHZ内部频率,pwm时钟16分频,输出5.44khzpwm
*******
******* qd p14 //启动信号
******* 24v p15 //24v开关
******* PWM p03 //pwm输出
*************************************************************/
#include "gpio.c"
#include "pca.c"
#include "ddl.c"
#include "sysctrl.c"
#include "interrupts_hc32f005.c"
#include "uart.c"
#include "bt.c"
#define E24V_on Gpio_WriteOutputIO(GpioPort1, GpioPin5, TRUE) //24v电源开
#define E24V_off Gpio_WriteOutputIO(GpioPort1, GpioPin5, FALSE) //24v电源关
#define qd_on Gpio_WriteOutputIO(GpioPort1, GpioPin4, TRUE) //启动
#define qd_off Gpio_WriteOutputIO(GpioPort1, GpioPin4, FALSE) //关闭
#define dw0 GpioPin4
#define dw1 GpioPin1
#define dw2 GpioPin2
#define dw3 GpioPin3
#define dw4 GpioPin4
#define dw5 GpioPin5
#define dw6 GpioPin6
#define dw7 GpioPin2
#define dw8 GpioPin3
#define D0 1
#define D1 80
#define D2 105
#define D3 130
#define D4 155
#define D5 180
#define D6 205
#define D7 230
#define D8 255
static void Mcu_initcfg(void);
static void App_chip4MHzTo16MHz (void);
static void App_Pca_Pwm_cfg(uint8_t pwith);
static void App_Uart1_cfg(void);
static void App_send(uint8_t xy);
static void App_chip4MHzTo16MHz (void) //将时钟从RCH4MHz切换至RCH16MHzRCH时钟先将时钟
{ //从RCH切换至RCL32768,设置好频率后再切回RCH ///同频率的切换,需要先将时钟切换到RCL,
Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE); //使能内部低速时钟
Sysctrl_SysClkSwitch(SysctrlClkRCL); //切换至内部低速时钟
Sysctrl_SetRCHTrim(SysctrlRchFreq22_12MHz); //< 加载目标频率的RCH的TRIM值
Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE); //< 使能RCH(默认打开,此处可不需要再次打开)
//
Sysctrl_SysClkSwitch(SysctrlClkRCH); //< 时钟切换到RCH
Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE); //< 关闭RCL时钟
}
static void Mcu_initcfg(void)
{
stc_gpio_cfg_t GpioCfg;
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //打开GPIO时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralPca,TRUE); //打开PCA时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE); //模式0/2可以不使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE); //打开UART1时钟
DDL_ZERO_STRUCT(GpioCfg);
GpioCfg.enDir = GpioDirIn; //< 端口方向->输入
GpioCfg.enDrv = GpioDrvL; //< 端口驱动能力->低驱动能力
GpioCfg.enPu = GpioPuEnable; //< 端口上拉使能
GpioCfg.enPd = GpioPdDisable; //< 端口下拉禁止
GpioCfg.enOD = GpioOdDisable; //< 端口开漏输出禁止
Gpio_Init(GpioPort0, GpioPin1, &GpioCfg); //1档
Gpio_Init(GpioPort0, GpioPin2, &GpioCfg); //2档
Gpio_Init(GpioPort0, GpioPin3, &GpioCfg); //PcaPwm
Gpio_Init(GpioPort2, GpioPin3, &GpioCfg); //3档
Gpio_Init(GpioPort2, GpioPin4, &GpioCfg); //4档
Gpio_Init(GpioPort2, GpioPin5, &GpioCfg); //5档
Gpio_Init(GpioPort2, GpioPin6, &GpioCfg); //6档
Gpio_Init(GpioPort2, GpioPin7, &GpioCfg); //P27空闲
Gpio_Init(GpioPort3, GpioPin1, &GpioCfg); //P31空闲
Gpio_Init(GpioPort3, GpioPin2, &GpioCfg); //7档
Gpio_Init(GpioPort3, GpioPin3, &GpioCfg); //8档
Gpio_Init(GpioPort3, GpioPin4, &GpioCfg); //0档
Gpio_Init(GpioPort3, GpioPin5, &GpioCfg); //P35空闲
Gpio_Init(GpioPort3, GpioPin6, &GpioCfg); //P36空闲
DDL_ZERO_STRUCT(GpioCfg);
GpioCfg.enDir = GpioDirOut; //< 端口方向->输出
GpioCfg.enDrv = GpioDrvH; //< 端口驱动能力->高驱动能力
GpioCfg.enPu = GpioPuDisable; //< 端口上拉无
GpioCfg.enPd = GpioPdDisable; //< 端口下拉无
GpioCfg.enOD = GpioOdDisable; //< 端口开漏输出->禁止
Gpio_Init(GpioPort1, GpioPin4, &GpioCfg);
Gpio_Init(GpioPort1, GpioPin5, &GpioCfg);
}
static void App_Pca_Pwm_cfg(uint8_t pwith)
{
stc_gpio_cfg_t GpioPcaCfg;
stc_pcacfg_t PcaCfg;
DDL_ZERO_STRUCT(GpioPcaCfg);
DDL_ZERO_STRUCT(PcaCfg);
GpioPcaCfg.enDrv = GpioDrvL; //驱动能力配置->低驱动能力
GpioPcaCfg.enDir = GpioDirOut; //端口方向配置->输出
// GpioPcaCfg.enOD = GpioOdEnable; //端口开漏输出
Gpio_Init(GpioPort0, GpioPin3, &GpioPcaCfg);
Gpio_SetAfMode(GpioPort0, GpioPin3, GpioAf1);
PcaCfg.pca_clksrc = PcaPclkdiv16;
PcaCfg.pca_cidl = FALSE;
PcaCfg.pca_ecom = PcaEcomEnable; //允许比较器功能
PcaCfg.pca_capp = PcaCappDisable; //禁止上升沿捕获
PcaCfg.pca_capn = PcaCapnDisable; //禁止下降沿捕获
PcaCfg.pca_mat = PcaMatDisable; //禁止匹配功能
PcaCfg.pca_tog = PcaTogDisable; //禁止翻转控制功能
PcaCfg.pca_pwm = PcaPwm8bitEnable; //使能PWM控制输出
PcaCfg.pca_ccapl =pwith;
PcaCfg.pca_ccaph =pwith;
Pca_M3Init(&PcaCfg);
Pca_StartPca(TRUE);
}
static void App_Uart1_cfg(void)
{
uint16_t timer=0;
stc_gpio_cfg_t PcaGpioCfg; //PCA引脚配置
stc_uart_baud_cfg_t setBaud; //波特率结构
stc_bt_cfg_t BtCfg;
stc_uart_cfg_t uart_Cfg;
DDL_ZERO_STRUCT(PcaGpioCfg);
DDL_ZERO_STRUCT(setBaud);
DDL_ZERO_STRUCT(BtCfg);
DDL_ZERO_STRUCT(uart_Cfg);
PcaGpioCfg.enDir = GpioDirOut;
Gpio_Init(GpioPort3, GpioPin5, &PcaGpioCfg);
Gpio_SetAfMode(GpioPort3, GpioPin5, GpioAf1); //配置P35 端口为URART1_TX
PcaGpioCfg.enDir = GpioDirIn;
Gpio_Init(GpioPort3, GpioPin6, &PcaGpioCfg);
Gpio_SetAfMode(GpioPort3, GpioPin6, GpioAf1); //配置P36 端口为URART1_RX
setBaud.bDbaud = 0u; //双倍波特率功能
setBaud.u32Baud = 9600u; //更新波特率位置
setBaud.enMode = UartMode3; //计算波特率需要模式参数
setBaud.u32Pclk = Sysctrl_GetPClkFreq(); //获取PCLK
timer = Uart_SetBaudRate(M0P_UART1, &setBaud); //设置波特率
BtCfg.enMD = BtMode2;
BtCfg.enCT = BtTimer;
Bt_Init(TIM1, &BtCfg); //调用basetimer1设置函数产生波特率
Bt_ARRSet(TIM1,timer); //重载值设置
Bt_Cnt16Set(TIM1,timer); //16位计数器初值设置
Bt_Run(TIM1);
uart_Cfg.enRunMode = UartMode3; //启用模式3
Uart_Init(M0P_UART1, &uart_Cfg);
}
void App_send(uint8_t xy)
{
// Uart_SetTb8(M0P_UART1,UartEven,xy); //设置UartEven偶校验,UartOdd奇校验
Uart_SendDataPoll(M0P_UART1,xy); //查询发送
}
/*******************************************************************/
int32_t main(void)
{
App_chip4MHzTo16MHz(); //切换至22.12MHZ
Mcu_initcfg(); //MCU初始化配置
// qd_on;
// E24V_on;
App_Pca_Pwm_cfg(D0);
App_Uart1_cfg();
App_send(3); //送去显示
while(1)
{
if(Gpio_GetInputIO(GpioPort3,GpioPin4)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D0;
qd_off;
E24V_off;
App_send(0); //送去显示
}
if(Gpio_GetInputIO(GpioPort0,GpioPin1)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D1;
E24V_on;
qd_on;
App_send(1); //送去显示
}
if(Gpio_GetInputIO(GpioPort0,GpioPin2)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D2;
E24V_on;
qd_on;
App_send(2); //送去显示
}
if(Gpio_GetInputIO(GpioPort2,GpioPin3)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D3;
E24V_on;
qd_on;
App_send(3); //送去显示
}
if(Gpio_GetInputIO(GpioPort2,GpioPin4)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D4;
E24V_on;
qd_on;
App_send(4); //送去显示
}
if(Gpio_GetInputIO(GpioPort2,GpioPin5)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D5;
E24V_on;
qd_on;
App_send(5); //送去显示
}
if(Gpio_GetInputIO(GpioPort2,GpioPin6)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D6;
E24V_on;
qd_on;
App_send(6); //送去显示
}
if(Gpio_GetInputIO(GpioPort3,GpioPin2)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D7;
E24V_on;
qd_on;
App_send(7); //送去显示
}
if(Gpio_GetInputIO(GpioPort3,GpioPin3)==0)
{
M0P_PCA->CCAP3H_f.CCAP3 =D8;
E24V_on;
qd_on;
App_send(8); //送去显示
}
}
}
|