华大芯片HC32L110C6PA(探索)

在现在用华大的芯片比较多整理了一些常用的函数和方法。

1,常用的端口操作库函数

IO口输出低电平

原型  en_result_t Gpio_ClrIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
举例  Gpio_ClrIO(GpioPortA ,GpioPin1 );                                    //PA01端口输出低电平

IO口输出高电平

原型  en_result_t Gpio_SetIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
举例  Gpio_SetIO(GpioPortA ,GpioPin1 );                                   //PA01端口输出高电平
获得IO口输入值
原型  boolean_t Gpio_GetInputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
举例  u8PA1Stat = Gpio_GetInputIO(GpioPortA ,GpioPin1);                 
//u8PA1Stat 为PA1端口输入电平状态
获得IO口输出值
原型  boolean_t   Gpio_ReadOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
举例  u8PA1Stat = Gpio_ReadOutputIO(GpioPortA ,GpioPin1);                //u8PA1Stat 为PA1端口输出电平状态
同时让一组端口中的多个引脚输出低电平
原型  en_result_t Gpio_ClrPort(en_gpio_port_t enPort, uint16_t u16ValMsk)
举例  Gpio_ClrPort(GpioPortA , 0x000F);                              //PA0~PA3输出低电平,其余保持
同时让一组端口中的多个引脚输出高电平
原型  en_result_t Gpio_SetPort(en_gpio_port_t enPort, uint16_t u16ValMsk)
举例  Gpio_SetPort(GpioPortA , 0x000F);                             //PA0~PA3输出高电平,其余保持
获取一组IO口的输入数据
原型  uint16_t  Gpio_GetInputData(en_gpio_port_t enPort)
举例  u16PAInputData = Gpio_GetInputData(GpioPortA );               //u16PAInputData的值为PA组输入数据

2,特殊端口复用IO

可根据在官网中的文件配置相关的寄存器,例如外部晶振的复用

M0P_CLOCK->PERI_CLKEN_f.GPIO=1;  //gpio时钟使能
	M0P_GPIO->P01_SEL_f.SEL=0;        //普通端口
	//M0P_GPIO->P0DIR_f.P01=1;           //配置成输入
	M0P_GPIO->P0ADS_f.P01=0;           //配置为数字端口用于判断高低电平

3,中断的初始化和使用

初始化

//		初始化外部IO P32
//    Gpio_InitIOExt(3,2, GpioDirIn, TRUE, FALSE, FALSE, 0);//输入模式 下拉
//		Gpio_SetIO(3, 2, TRUE);//输出高电平,P32使能 外部中断
//		开启GPIO外部中断
//    Gpio_ClearIrq(3, 2);//清除中断标志位
//    Gpio_EnableIrq(3, 2, GpioIrqLow);//中断设置 P32低电平触发
//    EnableNvic(PORT3_IRQn, DDL_IRQ_LEVEL_DEFAULT, TRUE);//中断使能 通道3 第二优先级 每十个引脚一个通道

 中断处理函数

void Gpio_IRQHandler(uint8_t u8Param)//中断服务函数
{
    *((uint32_t *)((uint32_t)&M0P_GPIO->P3ICLR + u8Param * 0x40)) = 0;
    
    //内容

	Gpio_ClearIrq(3,2);//清除中断标志位
}

4,ADC初始化和使用

ADC初始化

 stc_adc_cfg_t      stcAdcCfg;
    stc_adc_norm_cfg_t stcAdcNormCfg;

    DDL_ZERO_STRUCT(stcAdcCfg);
    DDL_ZERO_STRUCT(stcAdcNormCfg);

    if (Ok != Clk_SetPeripheralGate(ClkPeripheralAdcBgr, TRUE))
    {
        return ;
    }

	Gpio_SetAnalog(0, 2, TRUE);
    Gpio_SetAnalog(3, 5, TRUE);

    Adc_Enable();
    M0P_BGR->CR_f.BGR_EN = 0x1u;//BGR必须使能
    M0P_BGR->CR_f.TS_EN  = 0x0u;

    delay100us(1);

    stcAdcCfg.enAdcOpMode = AdcNormalMode;          //单次采样模式
    stcAdcCfg.enAdcClkSel = AdcClkSysTDiv1;         //PCLK
    stcAdcCfg.enAdcSampTimeSel = AdcSampTime12Clk;   //4个采样时钟
    stcAdcCfg.enAdcRefVolSel = RefVolSelInBgr2p5;   //参考电压:内部2.5V(avdd>3V,SPS<=200kHz)  SPS速率 = ADC时钟 / (采样时钟 + 16CLK) 
    stcAdcCfg.bAdcInBufEn = FALSE;                  //电压跟随器如果使能,SPS采样速率 <=200K
    stcAdcCfg.u32AdcRegHighThd = 0u;                //比较阈值上门限
    stcAdcCfg.u32AdcRegLowThd = 0u;                 //比较阈值下门限
    stcAdcCfg.enAdcTrig0Sel = AdcTrigDisable;       //ADC转换自动触发设置
    stcAdcCfg.enAdcTrig1Sel = AdcTrigDisable;
    Adc_Init(&stcAdcCfg);    

    stcAdcNormCfg.enAdcNormModeCh = AdcExInputCH8;  //通道8 P02
    stcAdcNormCfg.bAdcResultAccEn = FALSE;
    Adc_ConfigNormMode(&stcAdcCfg, &stcAdcNormCfg);	

	stcAdcNormCfg.enAdcNormModeCh = AdcExInputCH5;  //通道5 P35
    stcAdcNormCfg.bAdcResultAccEn = FALSE;
    Adc_ConfigNormMode(&stcAdcCfg, &stcAdcNormCfg);

使用读取数值

  Adc_Start();
	
	while(FALSE != Adc_PollBusyState());
	Adc_GetResult(&u16AdcResult);
	Adc_ClrAccResult();  //清零累加采样值

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值