stm32使用pwm和编码器模式(包含重映射)

Dri_TIM.c

#include "Dri_TIM.h"/*** @description: TIM4初始化,pwm模式* @return {*}*/
void Dri_TIM4_Init()
{/* 1.  开启时钟*//* 1.1 定时器4的时钟 */RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;/* 1.2 GPIO的时钟 PB */RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;/* 2. 设置GPIO的复用推挽输出 PB8 CNF=10 MODE=11*/GPIOB->CRH |= (GPIO_CRH_CNF8_1 | GPIO_CRH_MODE8);GPIOB->CRH &= ~GPIO_CRH_CNF8_0;/* 2. 设置GPIO的复用推挽输出 PB9 CNF=10 MODE=11*/GPIOB->CRH |= (GPIO_CRH_CNF9_1 | GPIO_CRH_MODE9);GPIOB->CRH &= ~GPIO_CRH_CNF9_0;/* 3. 定时器配置 *//* pwm频率=10k; pwm频率= 72M(时钟频率) /(PSC*ARR) *//* 3.1 预分频器的配置 */TIM4->PSC = 1 - 1;/* 3.2 自动重装载寄存器的配置 */TIM4->ARR = 7200 - 1;/* 3.3 计数器的计数方向 0=向上 1=向下*/TIM4->CR1 &= ~TIM_CR1_DIR;/* 4. pwm CH3相关配置 *//* 4.1 配置通道3的占空比 */TIM4->CCR3 = 0;/* 4.2 把通道3配置为输出  CCMR2_CC3S=00 输出*/TIM4->CCMR2 &= ~TIM_CCMR2_CC3S;/* 4.3 配置通道的输出比较模式 CCMR2_OC3M=110,pwm模式1*/TIM4->CCMR2 |= TIM_CCMR2_OC3M_2;TIM4->CCMR2 |= TIM_CCMR2_OC3M_1;TIM4->CCMR2 &= ~TIM_CCMR2_OC3M_0;/* 4.4 使能通道3  CCER_CC3E=1 */TIM4->CCER |= TIM_CCER_CC3E;/* 4.5 设置通道的极性 0=高电平有效  1=低电平有效 */TIM4->CCER &= ~TIM_CCER_CC3P;/* 5 CH4的相关配置 *//* 5.1 配置通道4的占空比 */TIM4->CCR4 = 0;/* 5.2 把通道4配置为输出  CCMR2_CC4S=00 输出*/TIM4->CCMR2 &= ~TIM_CCMR2_CC4S;/* 5.3 配置通道的输出比较模式 CCMR2_OC4M=110,pwm模式1*/TIM4->CCMR2 |= TIM_CCMR2_OC4M_2;TIM4->CCMR2 |= TIM_CCMR2_OC4M_1;TIM4->CCMR2 &= ~TIM_CCMR2_OC4M_0;/* 5.4 使能通道4  CCER_CC4E=1 */TIM4->CCER |= TIM_CCER_CC4E;/* 5.5 设置通道的极性 0=高电平有效  1=低电平有效 */TIM4->CCER &= ~TIM_CCER_CC4P;/* 6 使能定时器计数器 */TIM4->CR1 |= TIM_CR1_CEN;
}/*** @description: TIM2编码器模式:B1A、B1B* @return {*}*/
void Dri_TIM2_Init()
{/* 1.1 定时器2的时钟 */RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;/* 1.2 GPIO的时钟 PA\PB */RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN|RCC_APB2ENR_AFIOEN);/* 关闭JTAG,但是启用SWD(SWJ_CFG=010) */AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1;AFIO->MAPR &= ~(AFIO_MAPR_SWJ_CFG_2 | AFIO_MAPR_SWJ_CFG_0);/* 重映射引脚 TIM2_REMAP=11(PA15=TIM2-CH1,PB3=TIM2-CH2) */# AFIO->MAPR |= AFIO_MAPR_TIM2_REMAP_FULLREMAP;/* 初始化引脚,浮空输入(mode=00,cnf=01) */GPIOB->CRL &= ~GPIO_CRL_MODE3;GPIOB->CRL &= ~GPIO_CRL_CNF3_1;GPIOB->CRL |= GPIO_CRL_CNF3_0;GPIOA->CRH &= ~GPIO_CRH_MODE15;GPIOA->CRH &= ~GPIO_CRH_CNF15_1;GPIOA->CRH |= GPIO_CRH_CNF15_0;/* 定时器配置基本配置 *//* 3.1 预分频器的配置 */TIM2->PSC = 1 - 1;/* 3.2 自动重装载寄存器的配置,设为最大值 */TIM2->ARR = 0xFFFF;/* 关于编码器模式的配置 *//* 编码器3模式,SMS=011 */TIM2 -> SMCR |= TIM_SMCR_SMS;TIM2 -> SMCR &= ~TIM_SMCR_SMS_2;/* CC1S\CC2S = 01 */TIM2 -> CCMR1 |= (TIM_CCMR1_CC1S_0|TIM_CCMR1_CC2S_0);TIM2 -> CCMR1 &= ~(TIM_CCMR1_CC1S_1|TIM_CCMR1_CC2S_1);/* CC1P\CC2P = 0 */TIM2 -> CCER &= ~(TIM_CCER_CC1P|TIM_CCER_CC2P);/* 使能定时器的计数器 */TIM2 ->CR1 |= TIM_CR1_CEN;}/*** @description: TIM3编码器模式:B2A、B2B* @return {*}*/
void Dri_TIM3_Init()
{/* 1.1 定时器2的时钟 */RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;/* 1.2 GPIO的时钟 PA\PB */RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN|RCC_APB2ENR_AFIOEN);/* 关闭JTAG,但是启用SWD(SWJ_CFG=010) */AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1;AFIO->MAPR &= ~(AFIO_MAPR_SWJ_CFG_2 | AFIO_MAPR_SWJ_CFG_0);/* 重映射引脚 TIM3_REMAP=10(PB4=TIM3-CH1,PB5=TIM3-CH2) */AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_1;AFIO->MAPR &= ~AFIO_MAPR_TIM3_REMAP_0;/* 初始化引脚,浮空输入(mode=00,cnf=01) */GPIOB->CRL &= ~GPIO_CRL_MODE4;GPIOB->CRL &= ~GPIO_CRL_CNF4_1;GPIOB->CRL |= GPIO_CRL_CNF4_0;GPIOB->CRL &= ~GPIO_CRL_MODE5;GPIOB->CRL &= ~GPIO_CRL_CNF5_1;GPIOB->CRL |= GPIO_CRL_CNF5_0;/* 定时器配置基本配置 *//* 3.1 预分频器的配置 */TIM3->PSC = 1 - 1;/* 3.2 自动重装载寄存器的配置,设为最大值 */TIM3->ARR = 0xFFFF;/* 关于编码器模式的配置 *//* 编码器3模式,SMS=011 */TIM3 -> SMCR |= TIM_SMCR_SMS;TIM3 -> SMCR &= ~TIM_SMCR_SMS_2;/* CC1S\CC2S = 01 */TIM3 -> CCMR1 |= (TIM_CCMR1_CC1S_0|TIM_CCMR1_CC2S_0);TIM3 -> CCMR1 &= ~(TIM_CCMR1_CC1S_1|TIM_CCMR1_CC2S_1);/* CC1P\CC2P = 0 */TIM3 -> CCER &= ~(TIM_CCER_CC1P|TIM_CCER_CC2P);/* 使能定时器的计数器 */TIM3 ->CR1 |= TIM_CR1_CEN;}

Dri_TIM.h

#ifndef __DRI_TIM_H
#define __DRI_TIM_H#include "stm32f10x.h"void Dri_TIM4_Init();void Dri_TIM2_Init();void Dri_TIM3_Init();#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/374511.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

张量笔记(4):张量网络

张量分解通常是将高维张量分解成一系列较低维的张量,表示能力相对较低。而张量网络可以表示复杂的高维数据结构,通过连接多个张量形成网络结构,可以更灵活地表示和处理复杂的数据关系。本节主要介绍HT和TT网络。 2.5.1 HT分解——首先我们引入…

【软件测试工具】-抓包工具Fiddler使用讲解

Fiddler使用讲解 1.认识fiddler Fiddler是一个http协议调试代理工具,主要检查电脑和互联网之间的http通讯。(抓包工具) 特点:简单方便,比较灵活 工作原理: 当浏览器向服务器请求数据时,被Fiddl…

K8S 集群节点缩容

环境说明: 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233(需下线)192.168.99.2332C4Gwoker1.23.1720.10.24 1. K8S 集群节点缩容 当集群中有…

百数教学秘籍:三步走,轻松规划你的自动化计划任务

通过设定任务计划,用户可以轻松安排指定的功能插件或数据助手在特定时间自动执行,有效提高工作效率,还确保了数据的及时更新和处理。任务计划在应用启动时自动启动并在后台运行,无需用户持续监控,为用户带来极大的便利…

企业网站源码系统 自主快速搭建响应式网站 海量模版随心选择 带完整的源代码包以及搭建教程

系统概述 企业网站源码系统,是一款专为中小企业量身定制的网站建设解决方案。该系统基于先进的Web开发技术,融合了模块化设计理念和用户友好的操作界面,旨在帮助企业用户无需编程基础,即可轻松搭建出符合自身需求的响应式网站。通…

大语言模型基础

大语言基础 GPT : Improving Language Understanding by Generative Pre-Training 提出背景 从原始文本中有效学习的能力对于减轻自然语言处理中对监督学习的依赖至关重要。很多深度学习方法需要大量人工标注的数据,限制了它们在很多领域的应用,收集更…

双向带头循环链表

一、概念 何为双向:此链表每一个节点的指针域由两部分组成,一个指针指向下一个节点,另一个指针指向上一个节点,并且两头的节点也是如此,头节点的下一个节点是尾节点,尾节点的上一个节点是头节点&#xff1b…

ubuntu下载Nginx

一、Nginx下载安装(Ubuntu系统) 1.nginx下载 sudo apt-get install nginx2.nginx启动 启动命令 sudo nginx重新编译(每次更改完nginx配置文件后运行): sudo nginx -s reload3.测试nginx是否启动成功 打开浏览器访问本机80端口…

javaweb学习day1《HTML篇》--新浪微博(前端页面的创建思路及其HTML、css代码详解)

一、前言 本篇章为javaweb的开端,也是第一篇综合案例,小编也是看着黑马程序员的视频对里面的知识点进行理解,然后自己找一个新浪微博网页看着做的,主要还是因为懒,不想去领黑马程序员的资料了。 小编任务javaweb和ja…

3102. 最小化曼哈顿距离——leetcode

给你一个下标从 0 开始的数组 points ,它表示二维平面上一些点的整数坐标,其中 points[i] [xi, yi] 。 两点之间的距离定义为它们的曼哈顿距离。 请你恰好移除一个点,返回移除后任意两点之间的 最大 距离可能的 最小 值。 示例&#xff1…

【k8s中安装rabbitmq】k8s中基于安装rabbitmq并搭建镜像集群-pvc版

文章目录 简介一.条件及环境说明4.2.创建configmap配置4.3.创建statefulset和service headless配置4.4.授权配置4.5.创建service配置 五.安装完后的配置六.安装说明 简介 该文搭建的rabbitmq集群是采用rabbitmq_peer_discovery_k8s的形式进行搭建,是通过该插件自动从…

这8个AI工具高效无敌,设计师又轻松了!

人工智能工具在设计领域的广泛应用给艺术界带来了巨大的变化。设计师可以使用各种工具来展示他们的创造力和灵感,而不受时间和空间的限制。这些专业的人工智能绘图工具允许设计师看到每一步的最终结果,从而更高效、更方便地创造和设计灵感。因此&#xf…

什么是业务架构、数据架构、应用架构和技术架构

TOGAF(The Open Group Architecture Framework)是一个广泛应用的企业架构框架,旨在帮助组织高效地进行架构设计和管理。而TOGAF的核心就是由我们熟知的四大架构领域组成:业务架构、数据架构、应用架构和技术架构。 所以今天我们就来聊聊,企业…

水文:CBA业务架构师

首先, 我们来了解一下什么是CBA业务架构师? CBA业务架构师认证是由业务架构师公会(Business Architecture Guild)授予的一种专业认证。标志着证书持有者已经掌握了业务架构的核心技能和知识,能够在实际工作中熟练运用业务架构技术和框架&…

SAP S4 销售组的定义和分配

spro-企业结构-定义-销售与分销-维护销售组 新增一个记录 spro-企业结构-分配-销售与分销-给销售办公室分配销售组

c++多态——virtual关键字,C++11 override 和 final,析构函数的重写。

目录 多态基本概念 virtual关键字 C11 override 和 final 举个栗子 析构函数的重写(基类与派生类析构函数的名字不同) 多态基本概念 概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同…

关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论

目录 问题一:关于string的\0问题讨论 问题二:C标准库中的string内存是分配在堆上面吗? 问题三:string与vector的capacity大小设计的特点 问题四:string的流提取问题 问题五:迭代器失效 问题六&#xf…

filex用户手册中文版解读

filex用户手册 filex的用户手册,看着好头疼呢,主要是没有🖊记录,感觉就是浮在空中,飘在天上,好像懂了,又好像啥也没了解到,哈哈,有点意思。为了解决这个bug,…

哪个牌子开放式耳机质量好?五款全网爆火款式盘点!

开放式耳机是目前最流行的一种无线蓝牙耳机,与TWS耳机一样,拥有小巧轻盈的耳机主体,也有便携的补能收纳充电仓,但不同的是,开放式耳机有更加舒适的佩戴体验。作为资深数码产品测评师,我最近测评了多款产品&…

基于前馈神经网络 FNN 实现股票单变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对…