华大HC32F005单片机开发

2024-02-24 19:08

本文主要是介绍华大HC32F005单片机开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 芯片简介
      • 开发环境
      • Cortex-M0+内核
      • 基本功能开发
        • gpio配置
        • 外部中断
        • 时钟配置
        • 基本定时器
        • 延时函数
      • 特殊管脚配置
      • 休眠模式
      • 看门狗

芯片简介

在这里插入图片描述

开发环境

使用Keil作为开发IDE。
第一次使用需要安装HDSC的Device支持包。可以通过Pack Installer安装或从HDSC官网下载Device支持包,拷贝到keil源目录。
安装后,创建工程时,选择MCU型号一栏选择HDSC系列可见,表示可以安装环境正常。

Cortex-M0+内核

华大HC32F005系列单片机采用了Cortex-M0+的内核。
Cortex-M0+内核内置了嵌套向量中断控制器(NVIC),参考内核的头文件(安装路径下D:\Keil_v5\ARM\Pack\ARM\CMSIS\4.2.0\CMSIS\Include)

/** \brief  Enable External Interrupt */
void NVIC_EnableIRQ(IRQn_Type IRQn);/** \brief  Disable External Interrupt */
void NVIC_DisableIRQ(IRQn_Type IRQn);/** \brief  Get Pending Interrupt */
uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn);/** \brief  Set Pending Interrupt */
void NVIC_SetPendingIRQ(IRQn_Type IRQn);/** \brief  Clear Pending Interrupt */
void NVIC_ClearPendingIRQ(IRQn_Type IRQn);/** \brief  Set Interrupt Priority */
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority);/** \brief  Get Interrupt Priority */
uint32_t NVIC_GetPriority(IRQn_Type IRQn);/** \brief  System Reset */
void NVIC_SystemReset(void);/*@} end of CMSIS_Core_NVICFunctions */

通过以上Cortex-M0+提供的中断操作接口来配置系统中断。

基本功能开发

gpio配置
/*********************************************************************************** \brief   GPIO 初始化2 ** ** \param   [in]  u8Port             IO Port口** \param   [in]  u8Pin              IO Pin脚** \param   [in]  enDir              IO 方向(输入或输出)** \param   [in]  bPullup            上拉开关** \param   [in]  bPulldown          下拉开关** \param   [in]  bOdr               开漏开关** \param   [in]  bDrive             驱动能力 **                                   0 = 高**                                   1 = 低** \retval     Ok         设置成功**             其他值     设置失败******************************************************************************/
en_result_t Gpio_InitIOExt(uint8_t u8Port, uint8_t u8Pin,en_gpio_dir_t enDir,boolean_t bPullup,boolean_t bPulldown,boolean_t bOdr,boolean_t bDrive);

根据实际使用要求配置成上拉、下拉、开漏、驱动能力模式。
无特殊要求的gpio可以简化配置:

en_result_t Gpio_InitIO(uint8_t u8Port, uint8_t u8Pin, en_gpio_dir_t enDir);
外部中断

外部中断配置流程:

void Gpio_IRQHandler(uint8_t u8Param)
{if (Gpio_GetIrqStat(WL_WAKEUP_GPIO, WL_WAKEUP_GPIO_Pin) == 1) {Gpio_ClearIrq(WL_WAKEUP_GPIO, WL_WAKEUP_GPIO_Pin);}
}void gpio_config(void)
{Gpio_Init(GPIO, GPIO_Pin, GpioDirIn);// clear irq flagGpio_ClearIrq(GPIO, GPIO_Pin);// enable irqGpio_EnableIrq(GPIO, GPIO_Pin, GpioIrqFalling);EnableNvic(PORT0_IRQn, DDL_IRQ_LEVEL_DEFAULT, TRUE);
}void gpio_deinit(void)
{Gpio_DisableIrq(GPIO, GPIO_Pin, GpioIrqRising);Gpio_ClearIrq(GPIO, GPIO_Pin);
}
时钟配置

HC32F005芯片支持内部高速时钟(4M、8M、16M、24M)可配,低速时钟32.8K。
时钟初始化流程如下所示:

void clk_init(void)
{stc_clk_config_t stcCfg;/* set system freq */Clk_SetRCHFreq(ClkFreq16Mhz);/* CLK config */DDL_ZERO_STRUCT(stcCfg);stcCfg.enClkSrc = ClkRCH;   // RCH  = 16MstcCfg.enHClkDiv = ClkDiv1; // HCLK = 16M/1stcCfg.enPClkDiv = ClkDiv1; // PCLK = 16M/1/1Clk_Enable(ClkRCL, TRUE);Clk_Enable(ClkRCH, TRUE);Clk_Init(&stcCfg);/* open peripheral clk */Clk_SetPeripheralGate(ClkPeripheralGpio, TRUE);Clk_SetPeripheralGate(ClkPeripheralBt, TRUE);Clk_SetPeripheralGate(ClkPeripheralWdt,TRUE);
}
基本定时器

Timer0/1/2可以作为三个16位自动重载或32位无重载定时器/计数器使用。
例如,需要配置100us间隔定时器,参考代码:

void timer_irq_handler(void)
{if (Bt_GetIntFlag(TIM0)) {Bt_ClearIntFlag(TIM0);}
}void timer_init(void)
{stc_bt_config_t stcConfig;uint16_t u16ArrData = (0xffff - 0x190);uint16_t u16InitCntData = 0xC000;/* (0xffff - x) * y = 100us * 16M */stcConfig.enGateP = BtPositive;stcConfig.enGate = BtGateDisable;stcConfig.enPRS = BtPCLKDiv4;stcConfig.enTog = BtTogDisable;stcConfig.enCT = BtTimer;stcConfig.enMD = BtMode2;stcConfig.pfnTim0Cb = timer_irq_handler;Bt_Init(TIM0, &stcConfig);// TIM1 enable interruptBt_ClearIntFlag(TIM0);Bt_EnableIrq(TIM0);EnableNvic(TIM0_IRQn, 3, TRUE);// set load value and calc valueBt_ARRSet(TIM0, u16ArrData);Bt_Cnt16Set(TIM0, u16InitCntData);Bt_Run(TIM0);
}
延时函数

官方历程库ddl.c中提供了一组延时函数:

void delay1ms(uint32_t u32Cnt);
void delay100us(uint32_t u32Cnt);

这组函数使用轮询的方式来做延时,对于需要精确延时的场景不能满足要求。
可以采用通用的定时器方式来实现,参考如下:

static uint16_t timer_timeout = 0;void timer_irq_handler(void)
{if (Bt_GetIntFlag(TIM0)) {Bt_ClearIntFlag(TIM0);/* 100us timer */if (timer_timeout != 0) {timer_timeout--;}}
}void sleep_100us(unsigned short usec)
{timer_timeout = usec;while(timer_timeout != 0);
}

特殊管脚配置

  • RESET管脚复用
    RESET管脚默认作为复位输入端口,低有效;
    RESET管脚复用成普通IO口使用时,只支持输入模式;
    启动后需要配置管脚复用:Clk_SetFunc(ClkFuncRstPinIOEn, TRUE);
  • SWD管脚复用
    SWD管脚复用成普通IO口使用时,无法进入调试模式;
    启动后需要配置管脚复用:Clk_SetFunc(ClkFuncSwdPinIOEn, TRUE);
    如果需要通过SWD烧录程序,那么在设备上电后,最好延时2-3s,预留烧录初始化的时间再配置复用。否则设置了复用后会导致无法使用SWD功能。

休眠模式

进入休眠前可以配置休眠模式,可选:

  • 深度睡眠(5uA@3V)
  • 低速模式深度睡眠(10uA@32.768KHz)
  • 浅度睡眠三种模式(30uA/MHz@3V)

进入休眠的代码:__WFI();
在休眠模式下,可以使用外部中断触发唤醒设备,需要在设备休眠前配置使能中断。

看门狗

该型号HC32F005系列的看门狗,支持设置看门狗超时重启和超时进中断两种模式;
缺陷:开门狗一旦开启,无法关闭或停止;
特殊使用场景下需要做特殊处理,例如:需要设备在运行和休眠模式切换时,进入休眠前无法关闭看门狗。此处处理方法为:

  1. 设置看门狗中断,不使能看门狗重启;
  2. 在看门狗中断中根据使用场景来选择重启设备。
    重启设备的代码:NVIC_SystemReset();

这篇关于华大HC32F005单片机开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743073

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex