STM32G031 HAL库TIM2 PWM使用 占空比可调

2023-11-16

废话不多直接上代码

void HAL_TIM_MspPostInit()
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}


void TIM2_Init(uint16_t arr, uint16_t CCR4_Val)
{
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};
    __HAL_RCC_TIM2_CLK_ENABLE();

    uint16_t psr = 0;
    if(arr < 999)
    {
        psr = 99;
        arr =  64000000 / arr / 100 - 1;
    }
    else
    {
        psr = 0;
        arr =  64000000 / arr - 1;
    }
    CCR4_Val = (CCR4_Val * arr) / 100;

    htim2.Instance = TIM2;
    htim2.Init.Prescaler = psr;
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = arr;
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    HAL_TIM_Base_Init(&htim2);

    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);
    
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
   
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = CCR4_Val;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
    HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_OC_Init(&htim2);
   
    HAL_TIM_MspPostInit();
    HAL_TIM_Base_Start_IT(&htim2);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
    
}

void TIM2_Channel_1_Set_Duty(uint16_t arr, uint16_t CCR4_Val)
{
    if(arr < 999)
    {
        arr =  64000000 / arr / 100 - 1;
    }
    else
    {
        arr =  64000000 / arr - 1;
    }
    CCR4_Val = (CCR4_Val * arr) / 100;
    __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, CCR4_Val);
}
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  Led_GPIO_Init();
  TIM2_Init(100, 0);
  TIM3_Init();
  USART1_UART_Init();
  IIC_GPIO_Init();
  calc_value_pressure();
  TIM2_Channel_1_Set_Duty(100, 20);
  uint8_t val = 0;
  while (1)
  {
  /*  if(get_sys_time_100us() % 2000 == 0)
    {
        val += 20;
        if(val > 100) val = 0;
        TIM2_Channel_1_Set_Duty(100, val);
        
       // Put_press_and_temp_value();
        //JHM1200_get_cal();
        //DEBUG_PRINTF("Pressure %f\r\n",pressure);
        //DEBUG_PRINTF("TEMP %f\r\n",temp); 
    }*/
    led_task_ontick();
  }
}

 

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

STM32G031 HAL库TIM2 PWM使用 占空比可调 的相关文章

  • mysql 字段值(字符串)累加

    mysql在更新记录时 需要在原来的值上在累加新的值 例如原来有条记录 id country a784829a c0dc 4cb6 88a9 8c376fab83a6 USA 现在更新更新country字段 在原值的基础上添加 UK 使其变
  • 申请Google Player帐号上传自己开发的App

    1 访问https play google com apps publish signup 2 输入个人信息 3 在选择国家 地区时 由于列表中没有中国 所以我们只能选择香港 注册Google Player开发帐号是需要支付25美元费用的

随机推荐

  • Unity中关于委托与事件的使用及区别

    一 前言 1 什么是委托 个人理解 委托是一种容器 容器里面放的是函数方法 而函数的形式各不相同 参数 返回值各不相同 所以你做委托之前 先得要定义好这个委托容器存放的函数的类型 即委托类型 定义了好了函数类型后 将函数加入到委托容器后 你
  • 【Ubuntu】右键菜单添加用vscode打开

    右键菜单添加自定义命令 本文以添加右键使用vscode打开为例 1 进入 local share nautilus scripts文件夹 cd local share nautilus scripts 2 创建文件 vim Open in
  • 关于工具trinity:syscall测试

    git地址 https github com kernelslacker trinity linux下对syscall的模糊测试 main函数位于trinity c中 int main int argc char argv int ret
  • PLC通讯协议【三菱】FX协议的报文格式和读写示例

    通过编程口通讯协议 具体可操作的软元件有 X Y M S T C D 通讯设置 必须设置为 波特率9600 偶校验 7位数据位 1停止位 否则无法通讯 一 报文结构 注意 通讯协议中的所有字符是用它们的十六进制ASCII码表示 如果有十进制
  • Unity 3D模型展示之模型高亮

    最终效果 1 导入插件Outline Effect 在Asset Store或者Package Manager中搜索Outline Effect 并导入插件 导入成功后 2 Outline Effect 的使用 Main Camera添加O
  • 浅谈伺服电机三种控制方式

    速度控制和转矩控制都是用模拟量来控制的 位置控制是通过发脉冲来控制的 具体采用什么控制方式要根据客户的要求 满足何种运动功能来选择 如果您对电机的速度 位置都没有要求 只要输出一个恒转矩 当然是用转矩模式 如果对位置和速度有一定的精度要求
  • Vue中Rule的使用

    日常的rule效验 能帮我们省很多时间去做if eles判断 下边记录一下我在入职新公司的使用 1 需要效验的字段 要在from item上家prop属性 可以和字段同名 2 在data中创建一个rules对象 绑定当前的from表单 并把
  • dev c++无法识别汇编代码_新手福利丨超详细的Tengine GEMM矩阵乘法汇编教程

    很多刚入门Tengine的开发者想研读Tengine汇编代码 却苦于没有好的汇编入门教程 没有大神带入门 自己看又看不懂 怎么办 福利来了 Tengine带来了一份超详细的gemm汇编教程 GEMM简介 什么是GEMM 它的英文全称是 GE
  • 常见服务知识点罗列--haproxy/keepalived

    一 haproxy 1 haproxy配置的主要模块 global defaults 主要功能 实现负载均衡 root k8s ha1 vim etc haproxy haproxy cfg listen k8s 6443 bind 192
  • Prometheus监控 controller-manager scheduler etcd

    用prometheus插件监控kubernetes控制平面 例如 您使用kubeadm构建k8s集群 然后kube控制器管理器 kube调度程序和etcd需要一些额外的工作来进行发现 create service for kube cont
  • 利用pandas生成csv文件和读取csv文件中的方法

    方法一 1 我构造了一个cont list 结构为列表嵌套字典 字典是每一个样本 类似于我们爬虫爬下来的数据的结构 2 利用pd DataFrame方法先将数据转换成一个二维结构数据 如下方打印的内容所示 cloumns指定列表 列表必须是
  • MySQL主从复制与读写分离

    目录 主从复制与读写分离 读写分离 MySQL 读写分离原理 读写分离分类 主从复制 mysq支持的复制类型 主从复制的工作过程 MySQL主从复制延迟 搭建 MySQL主从复制 搭建 MySQL读写分离 主从复制与读写分离 在实际的生产环
  • python拆解字典中包含list的数据,全排列全部组合

    效果就是把类似 my dict config 1 1 2 3 4 config 2 test config 3 4 config 4 a b config 5 a 这样的数据拆解为 config 2 test config 3 4 conf
  • vue中使用vue-touch

    如果想让vue能够监听移动端的上滑 下滑 左滑 点击等等动作 可以使用vue touch插件 vue touch的使用十分简单 首先在vue项目中安装vue touch npm install vue touch next save 然后在
  • Unknown column in ‘where clause‘ 报错异常

    这时候我们首先要想到肯定是sql出现问题 打印出sql语句 用查询来执行 明显 在需要查询的字段 应该是加上引号 正确查询如下 解决方法 修改拼接查询语句的函数 在用测试类测试 完美解决
  • Matlab实战系列(一)——一些常用的绘图语句

    之前一直用Python的matplotlib pyplot包画图 很少用matlab 这次作业想用一下发现很多调整画图版式的函数都不太会用 网上系统一点的代码也不多 于是写一篇这个记录一下 母函数plot plot lambda R col
  • python---三元表达式

    三元表达式适用于二选一的场景 其结构为 值1 if 条件 else 值2 条件如果成立则使用值1 if前面的数据 条件如果不成立则使用值2 else后面的数据 写一个电影系统 需要决定电影是否收费 is change input 是否收费
  • 动手深度学习13:计算机视觉——语义分割、风格迁移

    文章目录 一 语义分割 1 1 语义分割简介 1 2 Pascal VOC2012 语义分割数据集 1 2 1下载 读取数据集 1 2 2 构建字典 RGB颜色值和类名互相映射 1 2 3 数据预处理 1 2 4 整合所有组件 读取Pasc
  • 栈的原理以及应用(制作一个简单的计算器)

    说在前面 其实有一段时间没有更新了 主要是这段时间学习了很多很多的新东西 现在也渐渐做一些整理 栈 stack 1 基础介绍 1 栈是一种先入后出 FILO 的有序列表 2 栈是限制线性表中元素插入和删除只能在线性表同一侧进行的一种特殊线性
  • STM32G031 HAL库TIM2 PWM使用 占空比可调

    废话不多直接上代码 void HAL TIM MspPostInit GPIO InitTypeDef GPIO InitStruct 0 HAL RCC GPIOA CLK ENABLE GPIO InitStruct Pin GPIO