通过stm32cubemx配置time1定时器产生中断

 

 

 

   以下为dma的配置

    hdma_tim1_up.Instance = DMA1_Stream0;
    hdma_tim1_up.Init.Request = DMA_REQUEST_TIM1_UP;
    hdma_tim1_up.Init.Direction = DMA_MEMORY_TO_MEMORY;
    hdma_tim1_up.Init.PeriphInc = DMA_PINC_ENABLE;
    hdma_tim1_up.Init.MemInc = DMA_MINC_ENABLE;
    hdma_tim1_up.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_tim1_up.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_tim1_up.Init.Mode = DMA_CIRCULAR;
    hdma_tim1_up.Init.Priority = DMA_PRIORITY_VERY_HIGH;
    hdma_tim1_up.Init.FIFOMode = DMA_FIFOMODE_DISABLE;

定义一个中断服务函数 

void TIM1_UP_IRQHandler(void)
{
    t1cnt++;
    for(uint16_t i=0;i<500;i++)
    dmasrc[i] ++;//对dma源地址不断写入数据以方便观察
    HAL_TIM_IRQHandler(&htim1);
}    

使能中断和dma

    HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
    HAL_DMA_Start (&hdma_tim1_up,(uint32_t)&dmasrc[0],(uint32_t)&dmastd[0],500);
    HAL_TIM_Base_Start_IT(&htim1);

编译后进调试可以观察到每一秒源地址每一秒左右刷新数据并向目的地址传输

### 使用STM32CubeMX配置TIM定时器 #### 配置前准备 确保已安装并启动STM32CubeMX软件。准备好所需的硬件设备,如开发板等。 #### 创建新项目 打开STM32CubeMX,在初始界面点击“New Project”,选择对应的MCU型号,例如STM32F407VET6[^2]。确认无误后单击下一步直至完成创建过程。 #### 定时器的选择与基本参数设定 在Pinout & Configuration页面下找到RCC选项卡中的Clock Configuration子项调整系统时钟频率至所需值(比如72 MHz)。接着切换到Connectivity标签页下的Timers部分来挑选计划使用的定时器资源,像TIM2、TIM3这样的通用型实例即可满足多数应用场景需求[^1]。 对于具体某个选定的定时器而言,需指定其高级特性Advanced-Control PWM generation (OC/IC/PWM) 或者基础功能Base Generation (Time base),此处以实现简单延时为例说明后者操作方法: - **Prescaler**:预分频系数决定了计数值更新速率,假设希望得到精确度较高的中断触发间隔,则可依据实际主频计算得出合适的除法因子,比如当APB1总线速度为50MHz时采用49999作为此参数意味着每秒发生约一千次溢出事件; - **Counter Period(ARR)**:自动重装载极限代表整个周期内的最大刻度数量,它直接影响最终形成的脉冲序列长度,同样以上述条件为基础设置成500的话就意味着每次达到该上限都会引发一次回调通知机制响应动作; - **Repetition Counter(RCR)**:重复次数仅适用于某些特殊场合,默认保持零状态不影响常规运作流程; - **Clock Division(CKD)**:用来定义死区时间插入方式以及输入捕获滤波等级,一般维持原样不必改动除非遇到特定要求情况。 上述各项均可以在GUI界面上直观地通过拖拽滑条或是手动填写数字框的形式快速达成目标效果。 #### 中断和服务例程关联 继续深入挖掘Configuration板块里的NVIC节点开启相应IRQ通道允许位以便后续能够正常接收到来自于硬件层发出的各种异步信号提示。与此同时还要记得前往Projects -> Settings菜单内勾选Generate peripheral clocks configuration code复选框从而确保编译环境里包含了必要的时基驱动库文件支持。 另外值得注意的是关于全局异常处理器位置安排方面,建议按照官方文档指导将`stm32f1xx_it.c`中预先写好的模板函数`HAL_TIM_IRQHandler()`保留下来不做任何修改直接利用就好。 #### 初始化代码生成 一切就绪之后返回首页按下GENERATE CODE按钮等待片刻就能获得一套完整的工程框架结构了。此时可以导入IDE工具链当中展开更深层次编程实践环节的学习之旅啦! ```c // 示例代码片段展示如何启动定时器 void StartTimer(void){ /* 启动定时器 */ HAL_TIM_Base_Start(&htim3); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值