news 2026/6/6 12:36:52

嵌入式周记1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式周记1

Duration:12月8日(周一)----10月14日(周日)

文章目录

    • Duration:12月8日(周一)----10月14日(周日)
    • 总结:
    • 例程
      • 1、`timg_32bit_timer_mode_periodic_sleep`
        • (1)简介
        • (2)应用源文件(main.c)(Application & ISR Layer代码)
        • (3)DriverLib 配置头文件(ti_msp_dl_config.h)
      • 2、`timx_timer_mode_pwm_edge_sleep`
        • (1)简介
        • (2)应用源文件(main.c)
        • (3)syscfg配置

总结:

(基于MSPM0G3507的例程学习)

  • Timer定时器中断例程
  • Timer输出PWM例程

例程

1、timg_32bit_timer_mode_periodic_sleep

(1)简介

timg_32bit_timer_mode_periodic_sleep例程展示了MSPM0G3507平台上 TimerG(TIMG)在低功耗周期定时场景中的典型用法,重点在于 “定时器中断唤醒+ SLEEP 低功耗运行” 的完整应用模式。下面按工程逻辑对该例程进行系统性介绍。

但是我手动删除了SLEEP 低功耗运行相关内容。

(2)应用源文件(main.c)(Application & ISR Layer代码)
#include"ti_msp_dl_config.h"intmain(void){SYSCFG_DL_init();NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);//使能中断函数DL_TimerG_startCounter(TIMER_0_INST);//手动开启通用定时器(TIMG)计数器while(1){//不考虑低功耗模式切换}}voidTIMER_0_INST_IRQHandler(void){//多中断模式下,switch选择/* DL_TIMER_IIDX_ZERO参数来自文件dl_timer.h 地址为C:\ti\mspm0_sdk_2_07_00_05\source\ti\driverlib\dl_timer.h 在该文件中搜索DL_TIMER_IIDX,即可看到中断对应的DriverLib枚举, 例如:DL_TIMER_IIDX_ZERO,DL_TIMER_IIDX_LOAD,DL_TIMER_IIDX_CC0_DN等。 */switch(DL_TimerG_getPendingInterrupt(TIMER_0_INST)){caseDL_TIMER_IIDX_ZERO:DL_GPIO_togglePins(GPIO_LEDS_PORT,GPIO_LEDS_USER_LED_1_PIN|GPIO_LEDS_USER_TEST_PIN);break;default:break;}}
  1. 中断使能函数
NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
  • 函数名:NVIC_EnableIRQ()
    为 CMSIS 提供的 NVIC 中断使能接口。

  • 参数:TIMER_0_INST_INT_IRQN
    为定时器对应的IRQ 中断号宏定义
    其定义位于DriverLib 配置头文件ti_msp_dl_config.h中,由 SysConfig 自动生成。

  1. 定时器启动函数
DL_TimerG_startCounter(TIMER_0_INST);
  • 函数名:DL_TimerG_startCounter()
    用于启动通用定时器(TIMG)计数器。

  • 参数:TIMER_0_INST
    为定时器外设实例句柄,同样定义于ti_msp_dl_config.h

  1. 中断源读取函数
DL_TimerG_getPendingInterrupt(TIMER_0_INST);
  • 函数名:DL_TimerG_getPendingInterrupt()
    用于读取当前定时器挂起的中断索引(Interrupt Index)。

  • 返回值:DL_TIMER_IIDX_xxx枚举类型
    用于区分不同的定时器中断事件。

  • 参数:TIMER_0_INST
    定时器外设实例,来源同上。

  1. 中断服务函数(ISR)命名规则
voidTIMER_0_INST_IRQHandler(void)
  • ISR 函数名必须与NVIC 向量表中对应的中断入口名称完全一致

  • 该名称由 SysConfig 根据定时器实例自动生成,并在
    ti_msp_dl_config.h中进行声明。

  • 若 ISR 命名不匹配,中断将无法正确响应。

(3)DriverLib 配置头文件(ti_msp_dl_config.h)
/* Defines for TIMER_0 */#defineTIMER_0_INST(TIMG12)#defineTIMER_0_INST_IRQHandlerTIMG12_IRQHandler#defineTIMER_0_INST_INT_IRQN(TIMG12_INT_IRQn)#defineTIMER_0_INST_LOAD_VALUE(15999999U)

这组宏把具体硬件定时器 TIMG12,包装成一个逻辑上的 “TIMER_0”,用于统一初始化、统一中断、统一参数配置

这组宏的命名遵循的是典型的嵌入式驱动层命名约定(driver-level naming convention)

第一层是逻辑功能名
TIMER_0并不等同于某个具体的硬件外设,而是工程中定义的“第 0 号逻辑定时器”。它代表“这个工程中用来完成某一功能的定时器实例”,而不是芯片手册里的 TIMG12、TIM2 之类的物理编号。这样做的好处是,业务代码只依赖TIMER_0,当硬件映射发生变化时,只需修改宏定义而无需改动逻辑代码。

第二层是实例/角色后缀
_INST_IRQHandler_INT_IRQN_LOAD_VALUE分别明确指出该宏在系统中的“角色”:

  • INST表示“外设实例本身”(通常是寄存器基地址或结构体指针)
  • IRQHandler表示“该实例对应的中断服务函数名”
  • INT_IRQN表示“该实例在 NVIC 中使用的中断号”
  • LOAD_VALUE表示“该实例的关键配置参数(装载值)”
    这种后缀命名方式使读代码的人无需查上下文就能知道这个宏该用在什么位置

第三层是全大写 + 下划线的风格
全大写明确表明这些是编译期常量或配置宏,而不是变量或函数;下划线分隔单词是 C 语言和嵌入式领域长期形成的事实标准,有利于跨团队、跨平台阅读。

2、timx_timer_mode_pwm_edge_sleep

(1)简介

timx_timer_mode_pwm_edge是一个使用 MSPM0 的 TimerX 生成边沿对齐 PWM 波形的标准示例,展示了如何通过硬件定时器比较机制,在几乎不占用 CPU 的情况下稳定输出可控占空比的 PWM 信号。

学习重心在于syscfg的配置上。

(2)应用源文件(main.c)
#include"ti_msp_dl_config.h"intmain(void){SYSCFG_DL_init();DL_TimerG_startCounter(PWM_0_INST);while(1){}}

DL_TimerG_startCounter(PWM_0_INST);开启定时器即可。

(3)syscfg配置

下面展示一个新工程的TIM关于PWM的配置。

其中Basic Configuration配置如下

其中PinMux配置如下

该新工程DEBUG后试运行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 4:19:46

昇腾CANN从单算子到融合优化实战

目录 1 摘要 2 技术原理 2.1 架构设计理念解析 2.2 核心算法实现 2.2.1 三级流水线设计原理 2.2.2 Tiling策略与数据重用 2.3 性能特性分析 2.3.1 理论性能模型 2.3.2 实测性能数据 3 实战部分 3.1 完整可运行代码示例 3.2 分步骤实现指南 步骤1:环境配…

作者头像 李华
网站建设 2026/6/6 14:05:08

大数据项目阿里云抢占式服务器

一、学生有免费额度可以使用 查看是否有免费的额度: https://university.aliyun.com/?spm5176.29458888.J_9220772140.19.6e632868x2bj7D 或者: https://free.aliyun.com/?spm5176.28623341.J_9220772140.18.4c044519hKalBC 二、购买抢占式资源服务…

作者头像 李华
网站建设 2026/6/5 10:29:31

Flink源码阅读:如何生成JobGraph

前文我们介绍了 Flink 的四种执行图,并且通过源码了解了 Flink 的 StreamGraph 是怎么生成的,本文我们就一起来看下 Flink 的另一种执行图——JobGraph 是如何生成的。 StreamGraph 和 JobGraph 的区别 在正式开始之前,我们再来回顾一下 Stre…

作者头像 李华
网站建设 2026/6/6 0:28:51

21、GNU 开发实用工具:函数、变量与调试技巧

GNU 开发实用工具:函数、变量与调试技巧 1. 关联数组与命名栈 在开发过程中,关联数组和命名栈是非常实用的数据结构。对于关联数组,可使用 defined 函数来测试键是否存在。 defined Arguments: 1: Name of associative array2: The key to test Returns: $(true) if …

作者头像 李华
网站建设 2026/6/2 23:43:22

YOLOv8+PyQt5车辆类型检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

资源包含可视化的车辆类型检测系统,基于最新的YOLOv8训练的车辆类型检测模型,和基于PyQt5制作的可视化车辆类型检测系统,包含登陆页面、注册页面和检测页面,该系统可自动检测和识别图片或视频当中出现的21种车辆类型,包…

作者头像 李华
网站建设 2026/6/4 8:06:56

打开软件出现找不到vcruntime140.dll文件 无法运行的情况 下载修复解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华