STM32F1Debug,定时器时基初始化参数

2023-05-16

STM32F1,定时器时基初始化参数

错误代码:

初始化时基时,没有给TIM_ClockDivision和TIM_RepetitionCounter赋值。

错误代码:

static void BSP_TIM_PWMOC_Config(void)
{
    uint16_t PSC = 7200;
    uint32_t ARR = 10000/20; 
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    BSP_TIMx_PWMOC_Clk_Cmd(BSP_TIMx_PWMOC_Clk,ENABLE);
    
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_Period= ARR-1;
    TIM_TimeBaseInitStructure.TIM_Prescaler = PSC-1;
    TIM_TimeBaseInit(BSP_TIMx_PWMOC,&TIM_TimeBaseInitStructure);
    TIM_ARRPreloadConfig(BSP_TIMx_PWMOC,ENABLE);
    
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_Pulse = ARR/2;
    TIM_OC1Init(BSP_TIMx_PWMOC,&TIM_OCInitStructure);
    TIM_OC1PreloadConfig(BSP_TIMx_PWMOC, TIM_OCPreload_Enable);
    TIM_Cmd(BSP_TIMx_PWMOC,ENABLE);
}
typedef struct
{
  uint16_t TIM_Prescaler;         /*!< Specifies the prescaler value used to divide the TIM clock.
                                       This parameter can be a number between 0x0000 and 0xFFFF */

  uint16_t TIM_CounterMode;       /*!< Specifies the counter mode.
                                       This parameter can be a value of @ref TIM_Counter_Mode */

  uint16_t TIM_Period;            /*!< Specifies the period value to be loaded into the active
                                       Auto-Reload Register at the next update event.
                                       This parameter must be a number between 0x0000 and 0xFFFF.  */ 

  uint16_t TIM_ClockDivision;     /*!< Specifies the clock division.
                                      This parameter can be a value of @ref TIM_Clock_Division_CKD */

  uint8_t TIM_RepetitionCounter;  /*!< Specifies the repetition counter value. Each time the RCR downcounter
                                       reaches zero, an update event is generated and counting restarts
                                       from the RCR value (N).
                                       This means in PWM mode that (N+1) corresponds to:
                                          - the number of PWM periods in edge-aligned mode
                                          - the number of half PWM period in center-aligned mode
                                       This parameter must be a number between 0x00 and 0xFF. 
                                       @note This parameter is valid only for TIM1 and TIM8. */
} TIM_TimeBaseInitTypeDef;       

当时考虑TIM_ClockDivision主要用于给死区时钟 ,也没有使用到TIM_RepetitionCounter,所以就没有给他们赋值。

预想输出:定时器输出PWM,20Hz,50%占空比。

实际输出:定时器输出PWM,10Hz,50%占空比。

错误分析:

经过debug发现:由于没有给参数赋值,结果MDK为局部变量产生一个随机值(但是每次debug都是这个值)。

可以看到此时

在这里插入图片描述

TIM_ClockDivision被赋值0x84D4,此时CR1被赋值为0xC4。

查STM32F1中文参考手册

在这里插入图片描述

可以发现CMS并没有被配置成边沿对齐模式,导致实际周期变为预计周期的一般。

修正错误

static void BSP_TIM_PWMOC_Config(void)
{
    uint16_t PSC = 7200;
    uint32_t ARR = 10000/20; 
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    BSP_TIMx_PWMOC_Clk_Cmd(BSP_TIMx_PWMOC_Clk,ENABLE);
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_Period= ARR-1;
    TIM_TimeBaseInitStructure.TIM_Prescaler = PSC-1;
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(BSP_TIMx_PWMOC,&TIM_TimeBaseInitStructure);
    TIM_ARRPreloadConfig(BSP_TIMx_PWMOC,ENABLE);
    
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_Pulse = ARR/2;
    TIM_OC1Init(BSP_TIMx_PWMOC,&TIM_OCInitStructure);
    TIM_OC1PreloadConfig(BSP_TIMx_PWMOC, TIM_OCPreload_Enable);
    TIM_Cmd(BSP_TIMx_PWMOC,ENABLE);
}

在这里插入图片描述

此时CR1寄存器被正确配置。

结论

在C语言中变量都会默认初始化。其中全局变量会默认初始化为0,而局部变量会初始化随机值。
在使用外设的时候,还是要给参数初始化,以防出现未知错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F1Debug,定时器时基初始化参数 的相关文章

  • void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?

    const void fun 和void const fun 两个相同 如果采用 34 按址传递方式 34 的函数返回值加const 修饰 xff0c 那么函数返回值 xff08 即地址 xff09 的内容不能被修改 xff0c 该返回值只
  • strcpy()、memcpy()、memmove()、memset()的实现

    strcpy memcpy memmove memset 的实现 strcpy 字符串拷贝 char strcpy char strDest const char strSrc assert strDest 61 NULL amp amp
  • 多重继承的构造函数和析构函数的执行顺序(包含虚基类)

    下面示例就是说明多重继承析构函数和构造函数的执行顺序 xff1a span class token macro property span class token directive hash span span class token d
  • 阿里云服务器 配置frp实现Ubuntu台式机电脑内网穿透

    起因 实验室一台Ubuntu20 04的台式机电脑 xff0c 我想用我的Win10笔记本远程连接它 xff0c 用它的高性能 xff0c 在Ubuntu的环境下来跑代码 xff0c 这样比较方便 编程环境即可具有便携 性能 两者兼得 xf
  • 【论文阅读笔记】GAN Memory with No Forgetting

    Hello大家好 xff0c 今天带大家来看Nips2020的最新文章 GAN Memory with No Forgetting 关于Nips2020所有关于终生学习的文章可见传送门 总览 本文是杜克大学 xff08 Duke Unive
  • 【论文阅读笔记】NeurIPS2020文章列表Part2

    Online Multitask Learning with Long Term MemoryFewer is More A Deep Graph Metric Learning Perspective Using Fewer Proxie
  • Macbook用Terminal启动Matlab

    最近更新到了Mac OS Big Sur xff0c 发现Matlab开启后直接无响应 xff0c 因此只能通过Terminal打开 xff0c 打开方式是在Terminal中输入如下代码直接敲回车就行啦 xff08 其中Matlab版本要
  • 对比学习学习笔记

    对比学习学习笔记 A Simple Framework for Contrastive Learning of Visual Representations Ting Chen Simon Kornblith Mohammad Norouz
  • Ubuntu18版本安装ROS

    最近不小心把虚拟机里的ROS弄坏了 xff0c 导致Linux都无法使用 也忘了快照导致所以软件重新安装 xff0c 在这里给大家分享一下ubuntu18版本如何安装ros以及我安装中出现的问题如何进行解决 注 xff1a 不同的ubunt
  • ER图

    1 某商业集团的销售管理系统 数据库中有三个实体集 xff0c 一是 商店 实体集 xff0c 属性有商店编号 商店名 地址等 xff1b 二是 商品 实体集 xff0c 属性有商品号 商品名 规格 单价等 xff1b 三是 职工 实体集
  • Tensorflow:EEG上CNN的一次实验

    一次失败的CNN实现 前言简介数据CNN网络 模型调整减少过拟合的尝试与全连接网络比较与SVM网络比较模型运用到其他分类标准结果分析代码CNN网络代码交叉验证代码FC网络代码SVM网络代码 前言 这是一次较为 失败 的分类器尝试 xff0c
  • MySql Error Code: 1046. No database selected Select

    初学者在建立表时容易遇到这样的报错 xff1a Error Code 1046 No database selected Select the default DB to be used by double clicking its nam
  • R语言自用笔记:复数

    复数在R语言中标示为z 61 x 43 iy 在R中虚数单位为i xff0c 如果是定值可以直接赋值 z1 61 1i print z1 1 0 43 1i z2 61 2 5i print z2 1 0 43 2 5i z3 61 1 4
  • [飞控]如何学习无人机-入门篇

    学什么 我把无人机分成3个大模块 操作 目的 xff1a 组装无人机 xff0c 享受驾驶无人机的乐趣 抱歉我给不了太多建议 xff0c 因为我从没有以此为目进行过学习 xff0c 但是我知道这一部分的知识关键词是 航模 xff0c 有非常
  • 说透互补滤波(1) - 线性互补滤波器从原理到实现

    为什么开源代码看不懂 xff1f 说起互补滤波 xff0c 之前非常的流行 xff0c 在那个算力不够的年代 xff0c 这种短小精干的融合算法 xff0c 风靡一时 原理也非常简单 xff1a 我有两路信号 xff0c 一个带有高频噪声
  • 飞控中的IIR二阶滤波器

    之前我们讲过一阶滤波器 xff0c 思路就是把一个连续的滤波器形式 xff0c 通过离散化的方式 xff0c 转换成差分方程 同事拿着我的文章 xff0c 对照着代码里的二阶滤波 xff0c 表示完全看不懂 xff0c 我说不可能 xff0
  • [源码解读]position_estimator_inav_main解读(如何启动光流)

    阅读工具 xff1a source insight 技术交流 xff1a zinghd 64 163 com xff0c 757012902 64 qq com 源码版本 xff1a Firmware xff08 原生固件 xff09 如有
  • [算法]px4位置估计-inav (2017/10/26更新)

    技术交流 xff1a zinghd 64 163 com 757012902 64 qq com 转载标明出处 xff0c 欢迎转载 xff0c 因为都是自己的想法 xff0c 不一定都是对的 xff0c 欢迎讨论 xff0c 哪有问题欢迎
  • [资料]Adams-matlab联合仿真

    刚才老师让把研一上学期做的四轴仿真图加几个图 xff0c 我发现突然忘了整么弄 xff0c 折腾了半个小时 xff0c 赶紧记下来 仿真的思路是 1 solidworks把飞机的硬件做出来 2 模型导入Adams中 xff0c 生成matl
  • [折腾日记]PX4编译环境各种解决方案(ubuntu)

    这篇博客可以解决 PX4编译环境的安装 强烈建议使用Ubuntu16 04的64位版本 xff01 方法1 xff1a 官方脚本 如果你是新装的Ubuntu还没有装软件 那么用官方脚本可以直接安装 官方提供了4个脚本 The scripts

随机推荐

  • ubuntu 12.04英文版设置成中文版

    适用于ubuntu 12 04英文版的系统 xff0c 其它版本的设置应该是大同小异的 进入ubuntu系统 xff0c 在顶部齿状标志找到system 2 在personal找到Language Support 3 进入Language
  • [资料]无人机资料大满足

    资料大汇总 xff0c 论文 xff0c 电子书 xff0c 博客 xff0c 网站看这一篇就够了 精选论文下载 Cubli 方盒机器人为何具有超级平衡能力 xff0c 技术难点是什么 xff1f 苏黎世联邦理工学院 xff08 ETH Z
  • [资料]《现代操作系统》《操作系统概念(操作系统恐龙书)》官方英文电子档

    准备学习一下操作系统 查了很多资料 xff0c 发现大神们统一推荐的两本好书 现代操作系统 Modern Operating Systems Global Edition 4th Edition xff0c 这本书是教材 xff0c Tan
  • [飞控][算法]APM姿态控制—加速度转倾斜角函数和四元数转轴角函数解析(修正)

    https zinghd gitee io blog accel to lean angles to axis angle
  • [飞控]从零开始建模(三)-控制分配浅析

    根据之前的文章 xff0c 我们的模型其实已经完成了 xff0c 模型的输入是四个电机的转速 xff0c 输出是我们需要的状态 位置 xff0c 速度 xff0c 加速度 xff0c 角加速度 xff0c 角速度 xff0c 角度 xff0
  • [飞控]姿态误差(三)-四元数和轴角求误差

    https zinghd gitee io Att err3
  • Matlab中的Smith 预估器

    Smith Predictor是针对时滞系统的 原理 xff1a 看Matlab help中的 34 Control of Processes with Long Dead Time The Smith Predictor 34 足矣 xf
  • meson和pkg-config

    最近再看simple cam xff0c 它是用meson构建的 有这样一句 xff1a deps 61 dependency 39 libevent pthreads 39 执行编译时报错 xff1a meson build 16 0 E
  • ubuntu 22.04右上角找不到wifi图标,有线网络也失效

    起因是我将显示驱动由默认的nouveau换成了nvidia xff0c 然后重启后在右上角就看不到wifi图标了 执行 96 sudo lshw c network 96 显示 xff1a network UNCLAIMED 执行sudo
  • PIE

    1 以2812为例 xff08 28335也是 xff09 xff0c PIE Vector在Memory Map的位置是0x0D00 0x0E00 这个是在cmd文件中的MEMORY部分指定的 xff1a PIE VECT origin
  • VS2013取消预编译头

    创建C 43 43 Win32控制台时忘了取消预编译头 xff0c 怎么取消 xff1f 右键项目 gt 属性 gt 配置属性 gt C C 43 43 gt 预编译头 gt 不使用预编译头 改天再写预编译头是干嘛的
  • Xmanager 6 图形化界面连接Centos7 配置步骤

    1 前提 Centos 7已经安装就绪 2 安装Xmanager 6 本博客以Xmanager6 0 0108为例 a 首先双击可执行文件 出现如下安装界面 点击 下一步 nbsp nbsp nbsp nbsp nbsp nbsp nbsp
  • VS中VC++目录中的$是什么意思

    VC ExecutablePath x64 项目是x64平台 WindowsSDK ExecutablePath VS ExecutablePath MSBuild ExecutablePath VC IncludePath VCInsta
  • 关于单应性矩阵的理解:Homography matrix for dummies

    尽量写的通俗一点 xff0c 因为从某种程度上讲 xff0c 本人也是dummy 1 先说homogeneous coordinate xff0c 齐次坐标 一幅2D图像上的非齐次坐标为 x y xff0c 而齐次坐标为 x y 1 xff
  • 关于RANSAC的理解

    先说最小二乘 ok xff0c 你手头有一堆数据 xff0c 比如这些蓝点 xff1a 那么我们假设它符合一个直线模型 xff1a y 61 ax 43 b xff0c 用最小二乘就可以很容易求解出未知参数a和b 最小二乘大法确实好哇 xf
  • Visual Studio中监视数组

    比如有一个double h 9 xff0c 如果选择监视 xff0c 那么就只会监视h 0 xff0c 如果想监视其他元素 xff0c 难道只能h 1 h 2 一个个的添加吗 xff1f 当然不需要 xff0c 在监视中输入h 9就可以了
  • 在编译PX4之前,你需要知道的几件事

    1 在git上clone代码 xff0c 必须是clone xff0c 因为编译时需要有 git文件夹 如果你看Makefile就会发现有这么一行 xff1a Enforce the presence of the GIT reposito
  • 马氏距离与卡方分布

    最近在看 Fundamentals of object tracking xff0c 看到最近邻滤波时 xff0c 碰到了题中的两个概念 以下内容基本来自wiki xff0c 读者有不懂的地方看wiki更清晰明了 1 马氏距离 Mahala
  • PX4中的mavlink

    简介 px4与地面站的通信协议是mavlink xff0c 对于其消息格式的介绍看这里和这里 需要注意几点 xff1a 不光是px4与qgroundcontrol通信通过mavlink xff0c 有一些sensor也支持mavlink m
  • STM32F1Debug,定时器时基初始化参数

    STM32F1 xff0c 定时器时基初始化参数 错误代码 xff1a 在初始化时基时 xff0c 没有给TIM ClockDivision和TIM RepetitionCounter赋值 错误代码 xff1a span class tok