STM32 使用TIM2_CH1(PA15) 输出10K PWM信号

2023-11-02

PA15-> TIM2 Remap CH1

1.apb_init()
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

2.gpio_init()
    #define PWM_GPIO_IDX                        8                   //PA15
    #define PWM_GRP                             GPIOA
    #define PWM_PIN                             GPIO_Pin_15
    #define PWM_MODE                            GPIO_Mode_AF_PP

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);    //disable JTAG
    GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);       //TIM2 Remap CH1->PA15  

3.pwm_init()
    /*
    72M / 10K = 720
    period = 720-1 = 719
    10分频: prescaler = 10-1 = 9
    */
    #define LF_PERIOD                                   719                     //周期
    #define LF_PRESCALER                                9                       //分频
    #define LF_PULSE                                    360                     //占空比

    void lf_init(void){

        TIM_DeInit(TIM2);//将外设 TIMx 寄存器重设为缺省值
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
         /* Time base configuration */
        TIM_TimeBaseStructure.TIM_Period = LF_PERIOD;//设置了在下一个更新事件装入活动的自动重装载寄存器周期的值
        TIM_TimeBaseStructure.TIM_Prescaler = LF_PRESCALER;//设置了用来作为 TIM1 时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;// 设置了时钟分割
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//选择了计数器模式

        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//根据 TIM_TimeBaseInitStruct 中指定的参数初始化 TIMx 的时间基数单位

        TIM_OCInitTypeDef TIM_OCInitStructure;
        /* PWM1 Mode configuration: Channel1 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择定时器模式
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//选择输出比较状态
        TIM_OCInitStructure.TIM_Pulse = LF_PULSE;//设置了待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性

        TIM_OC1Init(TIM2, &TIM_OCInitStructure);//根据 TIM1_OCInitStruct 中指定的参数初始化 TIM1 通道 1

        TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能或者失能 TIMx 在 CCR1 上的预装载寄存器

        TIM_ARRPreloadConfig(TIM2, ENABLE);//使能或者失能 TIMx 在 ARR 上的预装载寄存器

        TIM_Cmd(TIM2, ENABLE);//使能或者失能 TIMx 外设
    }

TIM2_Remap

/* -----------------------------------------------------------------------
  //对PWM的频率占空比解析
  TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:
  The TIM3CLK frequency is set to SystemCoreClock (Hz), to get TIM3 counter
  clock at 24 MHz the Prescaler is computed as following:
   - Prescaler = (TIM3CLK / TIM3 counter clock) - 1
  SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-density
  and Connectivity line devices and to 24 MHz for Low-Density Value line and
  Medium-Density Value line devices

  The TIM3 is running at 36 KHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1)
                                                = 24 MHz / 666 = 36 KHz
  TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%
  TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%
  TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%
  TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%
    uint16_t CCR1_Val = 333;
    uint16_t CCR2_Val = 249;
    uint16_t CCR3_Val = 166;
    uint16_t CCR4_Val = 83;
----------------------------------------------------------------------- */

//以下为解决停止pwm信号后偶发出现高电平 2018-08-11
void PwmControl(BOOL bCon){
    if(bCon){
        TIM_ForcedOC1Config(TIM2, TIM_ForcedAction_Active);
        TIM_Cmd(TIM2, ENABLE);
    }else{
        TIM_Cmd(TIM2, DISABLE);
        TIM_ForcedOC1Config(TIM2, TIM_ForcedAction_InActive);   //设置为非活动状态,低电平
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 使用TIM2_CH1(PA15) 输出10K PWM信号 的相关文章

  • mysql中dml全称是什么_dml是什么?

    展开全部 DML是Data Manipulation Language的缩写 意思是数据62616964757a686964616fe4b893e5b19e31333431363566操纵语言 是指在SQL语言中 负责对数据库对象运行数据访
  • 初识消息队列(Messges Queue)

    最近在学习消息队列 因此查阅了很多资料 所以将知识做了一个总和 方便读者读完对消息队列有一个大致的了解 1 什么是消息队列 消息队列一般简称为 MQ Messges Queue 是指利用高效可靠的消息传递机制进行与平台无关的数据交流 并基于
  • LeetCode——034

    34 Search for a Range My Submissions QuestionEditorial Solution Total Accepted 80156 Total Submissions 275867 Difficulty
  • GAMES101回顾 -- 光线追踪

    Ray Tracing 光线追踪 实现步骤 发射光线 Ray Generation 光线追踪算法从观察者的视点 如相机位置 发射一条主光线 这条光线的起点是相机位置 方向是从相机位置经过像素位置的射线 光线求交 Ray Object Int
  • 【负荷预测】长短期负荷预测(Matlab代码实现)

    欢迎来到本博客 作者研究 主要研究方向是电力系统和智能算法 机器学习和深度学习 目前熟悉python网页爬虫 机器学习 群智能算法 深度学习的相关内容 希望将计算机和电网有效结合 目前更新 电力系统相关知识 期刊论文 算法 机器学习和人工智

随机推荐

  • 如何找短视频素材?这些工具可以帮到你

    由于自媒体成本低 门槛低 越来越多的人纷纷转行加入自媒体大军 利用大数据的便利 大量产出短视频吸粉变现 那么 如何高速产出短视频作品呢 下面这几个工具超级实用 01 易撰 说起易撰 很多人都只知道易撰的自媒体库 是非常强大的爆文收集器 但其
  • 如何用pip升级python版本,python的pip升级没反应

    大家好 小编为大家解答python的pip如何更新到最新版本的问题 很多人还不知道如何用pip升级python版本 现在让我们一起来看看吧 1 pip如何升级 第一步 首先检测一下我们电脑是否安装了python 打开命令提示框 输入pyth
  • ir指令、立即数的作用_我们一起学RISC-V——05-RV32I指令集

    本期内容如下 RISC V指令格式 RV32I指令命名规则 RV32I指令集 重点指令详解 一 RISC V指令格式 RISC V按照32bit的指令不同字符的具体分布共分为6种基本格式 分别是R类型 I类型 S类型 U类型 J类型 B类型
  • jdbc获取一行字符串_JDBC基础

    什么是JDBC JDBC就是Java程序访问数据库的规范 是一个规范定义接口 各种数据库厂家实现了JDBC这个接口 这些实现类就是数据库驱动 使用时只需要调用接口中的方法即可 不用关注类是如何实现的 JDBC的核心API有以下几种 Driv
  • 前端学习——css盒子模型、css3新特性、伪类、布局0711TODO

    样式还是得具体使用才能理解 不然会忘记也理解不透彻 还有定位 元素溢出 浮动 布局水平 垂直对齐 css3新特性 1过渡 2 动画 3 2D 3D转换 伪类 三种定位方式 弹性布局 栅格布局
  • 餐馆(餐馆有n张桌子,每张桌子有一个参数a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 不允许拼桌的情况下,选择其中一部分客人,使得总预计消费金额最大)

    餐馆 某餐馆有n张桌子 每张桌子有一个参数 a 可容纳的最大人数 有m批客人 每批客人有两个参数 b人数 c预计消费金额 在不允许拼桌的情况下 请实现一个算法选择其中一部分客人 使得总预计消费金额最大 输入描述 输入包括m 2行 第一行两个
  • (手工)【sqli-labs42、43】POST注入、堆叠注入、错误回显、字符型注入

    目录 一 推荐 二 手工 SQL注入基本步骤 三 Less42 POST Error based String Stacked 3 1 简介 堆叠注入 错误回显 字符型注入 3 1 第一步 注入点测试 3 3 第二步 分析过滤 3 4 第三
  • 微软华裔科学家和他们的又一次冲动

    站在放映着自己照片的大屏幕前 对着现场的300人 西装革履的李世鹏有点紧张 发言稿是事先写好的 但他时不时中断几秒 好像忘了词儿 金山CEO张宏江揶揄瞬间转换身份的他 有点做作 微软门徒 李世鹏 在一幅拍摄于2001年的照片上 李世鹏与比尔
  • VsCode必备插件

    open in browser 安装浏览器插件 用于访问html页面 在 扩展栏 的搜索框中输入 open in browser 使用 Alt B 使用默认浏览器打开当前 html 页面 或 Shift Alt B 选择其他浏览器 Vetu
  • 【第十三讲】TMS320F28335开发板之DMA模块

    直接存储器访问 DMA 模块 一 内存与外设进行数据交换的方式 中断方式 每传输一次数据 就必须经历中断处理的全部步骤 而且一般需要借助CPU内部的寄存器作为中介 也就是说CPU需要从来源把每一片段的资料复制到暂存器 然后把它们再次写回到新
  • Vue 组件基础

    VUE 一 开发工具 VUE开发环境个人推荐使用VS code 然后安装特定的插件即可开发 可用插件如下 Vetur 语法高亮 智能感知 Emmet等 EsLint 语法纠错 Auto Close Tag 自动闭合HTML XML标签 Au
  • kibana常见启动报错

    环境 Ubuntu16 04 报错1 连接elasticsearch kibana启动报错 报错信息 Status changed from uninitialized to green Ready log 08 29 01 886 err
  • ModelSim的入门仿真步骤(图文干货)

    ModelSim仿真分为以下6个主要步骤 1 新建工程 2 新建或导入工程文件 3 文档编译 4 开始仿真 5 添加仿真波形 6 调整仿真时间 1 新建工程 点击左上角 File Project 弹出如下界面 在 Project Name
  • qt提升控件之后,编译报错

    引言 自定义的控件 在ui文件中将控件提升为自定义的控件 提升的时候没有指明提升的头文件的相对路径或者绝对路径 导致编译的时候无法找到相应的头文件 解决方法 1 在被提升的类的头文件前添加本机电脑所在的相对路径 2 在被提升的类的头文件前添
  • leveldb常见问题以及性能优化点

    本篇是leveldb最后一篇 这里主要把技术核心点 性能提升点或者面试可能会被问到进行总结 一 常见问题 1 leveldb key value内存 内存中保存的是所有key value吗 答 不是 搜索顺序 memtable immtab
  • 利用MATLAB中的newrb函数进行函数逼近

    RBF函数在神经网络控制中较为常见 MATLAB中早已集成了一个newrb的函数 在一些场景下使用起来还比较方便 尤其是涉及到进行函数逼近的时候 参考链接 http blog sina com cn s blog 9b8d0abd0101o
  • Android Studio连接自带模拟器失败怎么办?强烈建议使用第三方模拟器(含各类模拟器下载地址)

    学习安卓开发的小伙伴必然会碰到模拟器的启动问题 就算成功启动Android Studio自带的模拟器 使用起来也是十分缓慢 有时候卡起来是真想骂娘 服了他个老六 那么这个时候 如果有一个第三方模拟器 不仅简单好用 无需配置 而且美观快速零卡
  • 华为存储特性

    华为存储特性 1 SmartPartition SmartPartition是一种性能特性 根据不同业务特点分配存储系统的缓存资源来满足不同应用系统的服务质量要求 由于单个存储系统要面对的应用数量急剧增加 且各业务应用之间的I O特征不同
  • Android-第五节Menu菜单详解

    目录 一 Menu背景 二 Menu使用步骤 1 创建menu 2 设计menu 3 重写menu逻辑代码 4 运行效果 一 Menu背景 手机毕竟和电脑不同 它的屏幕空间非常有限 因此充分地利用屏幕空间在手机界面设计中就显得非常重要了 如
  • STM32 使用TIM2_CH1(PA15) 输出10K PWM信号

    PA15 gt TIM2 Remap CH1 1 apb init RCC APB1PeriphClockCmd RCC APB1Periph TIM2 ENABLE RCC APB2PeriphClockCmd RCC APB2Perip