小华HC32L136K8TA 单片机通用定时器(五)

华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置) #include "ds18b20.h" uint8_t DS18B20_Init(void) { stc_gpio_config_t pstcGpioCfg; DDL_ZERO_STRUCT(pstcGpioCfg); Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); pstcGpioCfg.enDir = GpioDirOut; pstcGpioCfg.enDrv = GpioDrvH; //< 端口驱动能力配. 阅读详情

一、将前面建立好的工程文件PRINTF文件夹复制一份,命名为TIME. 将PRINTF\MDK\PRINTF.uvprojx,改为TIME.uvprojx.双击这个文件打开工程。

二、修改工程配置
1.组driver下面添加bt.c
在这里插入图片描述
2.source下面添加timer.c
在这里插入图片描述
timer.h

#ifndef __TIMER_H
#define __TIMER_H

#include "ddl.h"

void App_Timer0Cfg(uint16_t u16Period);
void App_Timer1Cfg(uint16_t u16Period);

#endif

定时器0/1//2/3都是通用定时器,定时器3的功能更加强大。模式 0 计数定时器功能,这是定时器最基本的功能,到达一定的计数就产生更新中断。
重载模式计数范围从 ARR 向上计数到 0xFFFF 溢出,然后从 ARR 再开始计数,计数周期为 0Xffff-ARR+1;自由计数模式从设置计数值计数到 0xFFFFFFFF 后溢出,溢出后计数值从 0x0 重新开始计数。这是手册原话,在代码中体现出来了。

timer.c

#include "timer.h"
#include "usart.h"
#include "gpio.h"
#include "bt.h"


/*******************************************************************************
 * TIM0中断服务函数
 ******************************************************************************/
void Tim0_IRQHandler(void)
{
    static uint8_t flag =0;
  
    //Timer0 模式0 溢出中断
    if(TRUE == Bt_GetIntFlag(TIM0, BtUevIrq))
    {               
        Bt_ClearIntFlag(TIM0,BtUevIrq); //中断标志清零		
		if (flag){
			Gpio_SetIO(GpioPortD, GpioPin5); ///< LED关闭
		}else{
			Gpio_ClrIO(GpioPortD, GpioPin5);  
		}
		flag =!flag;
    }
}


/*******************************************************************************
 * TIM1中断服务函数
 ******************************************************************************/
void Tim1_IRQHandler(void)
{    
    uint8_t read;
    //Timer1 模式0 溢出中断
    if(TRUE == Bt_GetIntFlag(TIM1, BtUevIrq))
    {               
        Bt_ClearIntFlag(TIM1,BtUevIrq); //中断标志清零
		
		read = Gpio_GetInputIO(GpioPortD, GpioPin5);
		Gpio_WriteOutputIO(GpioPortD, GpioPin5,read^1);
		
    }
}



//Timer0配置初始化
void App_Timer0Cfg(uint16_t u16Period)
{
    uint16_t                  u16ArrValue;
    uint16_t                  u16CntValue;
    stc_bt_mode0_cfg_t     stcBtBaseCfg;
    
    DDL_ZERO_STRUCT(stcBtBaseCfg);
    
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBaseTim, TRUE); //Base Timer外设时钟使能
    
    stcBtBaseCfg.enWorkMode = BtWorkMode0;                  //定时器模式
    stcBtBaseCfg.enCT       = BtTimer;                      //定时器功能,计数时钟为内部PCLK
    stcBtBaseCfg.enPRS      = BtPCLKDiv256;                 //PCLK/256
    stcBtBaseCfg.enCntMode  = Bt16bitArrMode;               //自动重载16位计数器/定时器
    stcBtBaseCfg.bEnTog     = FALSE;
    stcBtBaseCfg.bEnGate    = FALSE;
    stcBtBaseCfg.enGateP    = BtGatePositive;
    Bt_Mode0_Init(TIM0, &stcBtBaseCfg);                     //TIM0 的模式0功能初始化
    
    u16ArrValue = 0x10000 - u16Period;
    Bt_M0_ARRSet(TIM0, u16ArrValue);                        //设置重载值(ARR = 0x10000 - 周期)
    
    u16CntValue = 0x10000 - u16Period;
    Bt_M0_Cnt16Set(TIM0, u16CntValue);                      //设置计数初值
    
    Bt_ClearIntFlag(TIM0,BtUevIrq);                         //清中断标志   
    Bt_Mode0_EnableIrq(TIM0);                               //使能TIM0中断(模式0时只有一个中断)
    EnableNvic(TIM0_IRQn, IrqLevel3, TRUE);                 //TIM0中断使能
}

//Timer1配置初始化
void App_Timer1Cfg(uint16_t u16Period)
{
    uint16_t                  u16ArrValue;
    uint16_t                  u16CntValue;
    stc_bt_mode0_cfg_t     stcBtBaseCfg;
    
    DDL_ZERO_STRUCT(stcBtBaseCfg);
    
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBaseTim, TRUE); //Base Timer外设时钟使能
    
    stcBtBaseCfg.enWorkMode = BtWorkMode0;                  //定时器模式
    stcBtBaseCfg.enCT       = BtTimer;                      //定时器功能,计数时钟为内部PCLK
    stcBtBaseCfg.enPRS      = BtPCLKDiv256;                 //PCLK/256
    stcBtBaseCfg.enCntMode  = Bt16bitArrMode;               //自动重载16位计数器/定时器
    stcBtBaseCfg.bEnTog     = FALSE;
    stcBtBaseCfg.bEnGate    = FALSE;
    stcBtBaseCfg.enGateP    = BtGatePositive;
    Bt_Mode0_Init(TIM1, &stcBtBaseCfg);                     //TIM1的模式0功能初始化
    
    u16ArrValue = 0x10000 - u16Period;
    Bt_M0_ARRSet(TIM1, u16ArrValue);                        //设置重载值(ARR = 0x10000 - 周期)
    
    u16CntValue = 0x10000 - u16Period;
    Bt_M0_Cnt16Set(TIM1, u16CntValue);                      //设置计数初值
    
    Bt_ClearIntFlag(TIM1,BtUevIrq);                         //清中断标志   
    Bt_Mode0_EnableIrq(TIM1);                               //使能TIM1中断(模式0时只有一个中断)
    EnableNvic(TIM1_IRQn, IrqLevel2, TRUE);                 //TIM1中断使能
}

要使用有定时器,当然要配置时钟,程序里面使用内部高速时钟,配置为48Mhz

#include "gpio.h"
#include "usart.h"
#include "flash.h"
#include "bt.h"
#include "timer.h"

static void App_LedInit(void);

//时钟配置初始化
void App_ClockCfg(void)
{
    en_flash_waitcycle_t      enWaitCycle;
    stc_sysctrl_pll_cfg_t     stcPLLCfg;
    
    //结构体初始化清零
    DDL_ZERO_STRUCT(stcPLLCfg);
    
    enWaitCycle = FlashWaitCycle1;
    Flash_WaitCycle(enWaitCycle);
    
    stcPLLCfg.enInFreq    = SysctrlPllInFreq4_6MHz;     //RCH 4MHz
    stcPLLCfg.enOutFreq   = SysctrlPllOutFreq36_48MHz;  //PLL 输出48MHz
    stcPLLCfg.enPllClkSrc = SysctrlPllRch;              //输入时钟源选择RCH
    stcPLLCfg.enPllMul    = SysctrlPllMul12;            //4MHz x 12 = 48MHz
    Sysctrl_SetPLLFreq(&stcPLLCfg);
    Sysctrl_SetPLLStableTime(SysctrlPllStableCycle16384);
    Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
    
    Sysctrl_SysClkSwitch(SysctrlClkPLL);  ///< 时钟切换
}



int32_t main(void)
{
    App_ClockCfg();
	App_LedInit();
	UART0_PortInit();//串口默认配置Pb8 为输出
	Uart0Cfg(57600);
	//App_Timer0Cfg(48000);   //Timer0配置初始化(周期 = 48000*(1/48M)*256 = 256ms)    
    //Bt_M0_Run(TIM0);        //TIM0 运行。	
	
	App_Timer1Cfg(18750); //100ms
	Bt_M1_Run(TIM1); 
	
	printf("Sysctrl_GetHClkFreq : %d \r\n",Sysctrl_GetHClkFreq());
	while(1)
	{ 
		printf("HC32L136K8TA-MINI......\r\n");
		delay1ms(1000);
	}
	
}


static void App_LedInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
    
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); 
    
    ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
    stcGpioCfg.enDir = GpioDirOut;
    ///< 端口上下拉配置->无上下拉
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdDisable;
    
    ///< LED关闭
    Gpio_SetIO(GpioPortD, GpioPin5);
    
    ///< GPIO IO LED端口初始化
    Gpio_Init(GpioPortD, GpioPin5, &stcGpioCfg);
    
}





编译烧录后打印如下,led灯闪烁正常
在这里插入图片描述
在这里插入图片描述

小华HC32L136K8TA 单片机新建 MDK5 工程模板 (一) 将HC32L13x_DDL_Rev2.1.0\example\gpio\gpio_output\MDK目录下的startup_hc32l13x.s文件复制到现在工程目录的Core下面.把HC32L13x_DDL_Rev2.1.0\mcu\common下面的hc32l13x.h、interrupts_hc32l13x.c、interrupts_hc32l13x.h、system_hc32l13x、system_hc32l13x.h文件也放在Core下面。这里是自己建的模板,所用的时间比较多。 阅读详情

相关推荐

基于HC32L136K8TA的FreeRTOS LED闪烁项目详解

HC32L136K8TA微控制器是华大半导体推出的一款高性能的32位ARM Cortex-M0+内核的微控制器产品,它在微处理器领域的应用非常广泛。这款产品拥有丰富的外设接口,极强的运算处理能力,以及出色的低功耗性能。本章节将详细介绍HC32L136K8TA微控制器的基本概念、特性、以及与其它同类型微控制器相比的独特优势,为读者提供基础的了解和参考,方便后续章节内容的理解和实践。HC32L136K8TA微控制器基于ARM Cortex-M0+核心,是专为嵌入式应用设计的高效微控制器。

weixin_35835030的博客 590

HC32L130国产超低功耗华大MCU芯片介绍

华大HC32L130 系列32 位 ARM® Cortex®-M0+ 微控制器 HC32L130 系列是一款旨在延长便携式测量系统的电池使用寿命的超低功耗、宽电压工作范围的 MCU。集成 12 位 1M sps 高精度 SARADC,以及集成了比较器、运放、内置高性能 PWM 定时器、LCD 显示、多路 UART、SPI、I2C 等丰富的通讯外设,内建 AES、RNG 等信息安全模块,具有高...

华大MCU★的专栏 2万+

基于YModem协议的HC32L130/L136 IAP Bootloader设计与实现

在嵌入式产品开发中,固件在线升级(IAP)是保障设备可维护性的关键能力。通过Bootloader与上位机配合,利用YModem协议实现串口传输固件,能够有效解决产线烧录、现场升级等场景下的效率与成本问题。YModem协议支持文件名传输、1024字节数据包和CRC16校验,相比自研协议更为规范可靠。基于华大HC32L130/HC32L136低功耗MCU平台,设计一套包含Flash分区、中断向量偏移、升级标志与掉电保护的IAP方案,可确保升级过程稳定可恢复。文章从协议原理到Bootloader实现细节,再到上位

weixin_29194255的博客 239

开发板学习日记之华大半导体HC32L136K8-01 入门

今天入手一块华大的开发板,板子主控为HC32L136K8,板子是在中电港免费申请的,因为我们有合作所以比较方便申请,其它朋友可尝试申请或者花点小钱。开发板 下面来介绍入门操作: 1.首先,到华大官网(http://www.hdsc.com.cn/)下载资料,在产品分类→MCU→产品系列→HC32L136  点击HC32L136这个型号,进入这个芯片的介绍页面,在最下方 点击资料下载,进入下...

liangwu5582066930的专栏 1万+

HC32L136_HC32例程_HC32L136_华大单片机HC32L136全套例程_cbnq.com_华大

资料包含华大单片机HC32L136系列全套例程,定时器、spi、液晶屏驱动、flash、dma等C语言文件

HC32L136K8TA-Keil工程-亲测0Error

根据小华单片机原始库进行修改,包含所有功能的驱动库

HC32单片机定时器

许多初学者弄不明白,为什么叫定时器/计数器呢?原因是这个设备既能用于定时也可以用于计数。这是什么原理呢?单片机怎么知道什么时候该定时,什么时候该计数呢?解:首先说一下既可以定时又可以计数的原理,实际上定时和计数的原理是一样的,都是靠数数来实现。比方说我家的水龙头坏了,关不紧,总是一滴一滴漏水,而且水滴滴的特别均匀,每两滴之间的时间间隔都是 1 秒,现在我们就可以利用数水滴滴数的方法来计算出时间,这就是定时的原理。再举个例子,阿范有一天很无聊,站在窗前向外看着公路上跑的小汽车,不自觉的就开。

weixin_44110278的博客 1245

ClaudeCode 通过 CC Switch 配置 Ollama 本地大模型

本文介绍了如何让Claude Code使用本地免费模型qwen3.5:9b而无需Anthropic API Key的方法。主要内容包括:1)安装Claude Code、CC Switch代理工具和Ollama本地模型运行时;2)配置环境变量和设置文件将请求转发到本地服务;3)详细说明了系统架构和工作原理,展示请求如何从Claude Code经CC Switch代理到Ollama本地模型。该方案通过代理拦截和转发机制,实现了使用免费开源模型替代官方API的功能。

稚枭天卓 3222

基于HC32L136K8TA官方库开发的LCD12864低层驱动记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、工程介绍:二、开发步骤1.引入库(打开GPIO官方例子进行了修改)2.GPIO引脚初始化3.主时钟初始化以及延时函数封装总结 前言 本工程案例为记录开发过程以及一些问题的解决 一、工程介绍: 本工程是在KELI环境中,直接引用官方的函数库进行开发。引脚的定义以及引用为本人通过多次测试后进行使用。 二、开发步骤 1.引入库(打开GPIO官方例子进行了修改) 2.GPIO引脚初始化 控制脚: stc_gpi

weixin_44006415的博客 1514

从0到1,快速理清 | DeepSeek Harness

DeepSeek推出自研Harness开发平台,主打"一切皆插件"理念,将AI执行能力模块化为可自由组合的插件体系。带你从0到1,快速了解开发链路。

IT学习博客 685

闲置服务器之代理服务器篇

这台服务器是在阿里云免费白嫖的,天工开物计划,阿里给的300块无门槛优惠券,买了一台新加坡的境外服务器,288,刚刚抵扣完,因为是境外服务器,能够访问一些国内不能访问的网站,所以本文章仅从技术的角度来搭建代理服务器,使用时,请自觉遵守国家相关规定,如有任何违法行为,与本人无任何关系!!!。本文使用tinyproxy来搭建代理服务器。

m0_50281408的博客 2104

小华HC32L136K8TA 单片机新建 MDK5 工程模板(二)

把gpio_output文件夹直接复制过来. 子目录下的EWARM目录直接删除,这里只使用MDK. 进入gpio_output\MDK的目录,直接双击打开gpio_output.uvprojx。HC32L13x_IDE_Rev1.2.1解压缩后里面有两个文件夹,IAR_IDE,MDK_IDE.在MDK5上安装,打开MDK_IDE文件夹,里面有个HDSC.HC32L13x.1.2.1.pack文件。工程栏有感叹号的文件都是没有找到路径的,右击文件弹出菜单,点击魔术菜单。里面的路径修改一下。

oshan2012的博客 649

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署

本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。

m2n3o4p5的博客 227

小华HC32L136K8TA 单片机PRINTF (四)

一、将前面建立好的工程文件LED_TEST文件夹复制一份,命名为PRINTF. 将LED_TEST\MDK\LED_TEST.uvprojx,改为PRINTF.uvprojx.双击这个文件打开工程。2.source下面添加usart.c,usart.h。小华HC32L136K8TA 单片机PRINTF。1.组driver下面添加uart.c。usart.c的文件内容如下。编译下载,烧录后的打印效果。

oshan2012的博客 376

【WRF数据准备】土地利用数据-MODIS MCD12Q1数据下载及制备

【WRF数据准备】MODIS静态地理数据下载及制备

WW、forever的博客 3413

cesium 综合教程200+【目录】(已包含186篇文章)

cesium示例教程100+旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。目录中有链接的为已有文章,没链接的为目标文章,不断更新中…

大剑师兰特的GIS世界 8897

小华HC32L136K8TA 单片机LED(三)

如果表格里面没有HC32L13X这个选项. 把驱动库及样例\HC32L13x_DDL_Rev2.1.0\mcu\MDK\config\FlashHC32L13X_64K.FLM文件复制到C:\Keil_v5\ARM\Flash目录下面,再次打开就能看到了。一、将前面建立好的工程文件gpio_output文件夹复制一份,命名为LED_TEST. 将LED_TEST\MDK\gpio_output.uvprojx,改为LED_TEST.uvprojx.双击这个文件打开工程。烧录后,LED灯闪烁正常。

oshan2012的博客 518

一层一责,一聚合一包:DDD分层架构下的微服务代码模型、三重边界与服务数据协作

领域模型画得再清楚,落不进代码也是空谈。本文以一个可运行的客户中心微服务为线索,先对比整洁架构、六边形架构与DDD分层架构,指出三者共同守护的那条隔离核心业务的红线;再把DDD分层落成四个一级目录、以聚合为单位分包、一个聚合一个仓储的代码模型,拆解实体、聚合根、值对象、领域事件、领域服务与仓储的设计要点;随后厘清逻辑、物理、代码三重边界,并用检查器实测:干净代码零越界,拆出积分聚合时领域代码无需改动;注入九处越界后,必须先重构才能拆分。最后梳理服务调用三场景与PO、DO、DTO、VO的协作。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 177万+

小华HC32L136K8TA不进中断

代码是官方的,工程师自己建的,但不进中断,最后和样库配置比对发现是这边没配置。后面发现了这个帖子,,话说小华是新改了名字吗。小华HC32L136K8TA不进中断。

weixin_41747032的博客 217

Motoman机器人离线编程——Motocom32开发简介

欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程——Motocom32开发简介 Motoman机器人离线编程——Visio Studio环境配置 Motoman机器人离线编程——Motocom32库函数的使用与封装 Motoman机器人离线编程——Motocom32参考文献及注意事项 Motoman机器人离线编程——MotocomES介绍 ...

冯Jungle的个人博客 8714

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

HC32L196KCTA 小华MCU

HC32F005C6PA -TSSOP-20 HC32F002C4PZ-TSSOP-20 HC32L130J8TA-LQFP48 HC32L130F8UA-QFN32 HC32F030E8PA-TSSOP-28 HC32L136K8TA-LQ64 HC32L072KATA-LQFP64 HC32F420JATB-LQFP48 HC32L176MATA-LQFP80 HC32L176KATA-LQ64 HC32F460KETA-LQFP64 HC32F460PETA-LQFP-10

jiang15323794243的博客 624

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华大HC32L136 PWM输出

华大芯片PWM输出

qqxs123789的博客 3635

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

华大芯片 小华HC32L136K8TA低功耗调试记录

没有使用的IO: 同一系列的芯片按最大引脚数来设置,没有引出来的引脚也要设置,在进入deepsleep或者sleep之前,可以配置为上拉输入,或者输出低电平;ADC的引脚: 还是保持ADC的属性(GPIO的ADS使能,init函数不需要(init函数可能会把ADS清零));已经使用的输入引脚: 外部电路有确定的电平,可以保持输入状态(外部有上拉或者下拉的,内部可以不设上下拉);已经使用的输出的引脚: 保持输出电平和外部电路等电势,或者改为输入;3.不带loraWAN模块,带NB模块的电流大概700微安。

weixin_42219373的博客 204

华大单片机HC32L130 / HC32L136 / HC32F030 系列硬件开发指南

适用对象 系列 产品型号 HC32L130 HC32L130E8PA / HC32L130F8UA / HC32L130J8TA / HC32L130J8UA HC32L136 HC32L136J8TA / HC32L136K8TA HC32L130 HC32F030E8PA / HC32F030F8UA / HC32F030F8TA / HC32F030H8TA / HC32F030J8TA / HC32F030K8TA 目录摘要应用电路(最小系统,仅供参考)电源复位电.

芯缘意码的博客 1万+

华大单片机HC32L136定时器时间如何计算

定时器是现代单片机的标配,顾名思义它的最基本作用就是定时。华大单片机HC32L136这颗芯片中包含了多个可以用来实现定时功能的外设,分别是通用定时器(TIM0/1/2/3)、低功耗定时器(LPTIM)、可编程计数阵列(PCA)、高级定时器(TIM4/5/6)、实时时钟(RTC)、看门狗定时器(WDT)和时钟校准模块(CLKTRIM)。由上可知HC32L136实现定时功能是非常灵活的,工程师们可以根据自己的项目实际使用到的模块而决定采用哪种方式来定时。下面先讲解下最最基本的定时方式–通用定时器(TIM0/1.

芯缘意码的博客 2万+

HC32L136K8TA单片机输出互为反相双路PWM

可这里可以参考stm32的代码看看 HC32L136K8TA的机制跟32差不多 以使用一个通用定时器输出两路互为反相的 PWM 波,但需要通过一定的配置技巧实现。与高级定时器(如 STM32 的 TIM1、TIM8 等)不同,通用定时器通常没有直接的互补输出功能。如果通用定时器只支持单通道输出,可以通过软件方式生成第二路反相 PWM 波。这里其实只需要将输出通道极性改变就可以了。

qq_64919823的博客 765
上一篇: 小华HC32L136K8TA 单片机PRINTF (四)
下一篇: 华大-小华HC32F460KETA 单片机新建 MDK5 工程模板
oshan2012
博客等级 码龄15年 300粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oshan2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值