STM32的PWM和DAC练习

2023-10-27

一、输出PWM波形

1.1、实验代码

代码来自野火STM32F103-mini开发板资料\1-书籍配套例程-F103RCMINI\32-TIM—高级定时器\3-TIM—高级定时器-PWM输入捕获。

static void GENERAL_TIM_GPIO_Config(void) 
{
  GPIO_InitTypeDef GPIO_InitStructure;

  // 输出比较通道1 GPIO 初始化
	RCC_APB2PeriphClockCmd(GENERAL_TIM_CH1_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GENERAL_TIM_CH1_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GENERAL_TIM_CH1_PORT, &GPIO_InitStructure);

	// 输出比较通道2 GPIO 初始化
	RCC_APB2PeriphClockCmd(GENERAL_TIM_CH2_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GENERAL_TIM_CH2_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GENERAL_TIM_CH2_PORT, &GPIO_InitStructure);
	
	// 输出比较通道3 GPIO 初始化
	RCC_APB2PeriphClockCmd(GENERAL_TIM_CH3_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GENERAL_TIM_CH3_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GENERAL_TIM_CH3_PORT, &GPIO_InitStructure);
	
	// 输出比较通道4 GPIO 初始化
	RCC_APB2PeriphClockCmd(GENERAL_TIM_CH4_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GENERAL_TIM_CH3_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GENERAL_TIM_CH3_PORT, &GPIO_InitStructure);
}

static void GENERAL_TIM_Mode_Config(void)
{
  // 开启定时器时钟,即内部时钟CK_INT=72M
	GENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK,ENABLE);

/*--------------------时基结构体初始化-------------------------*/
	// 配置周期,这里配置为100K
	
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	// 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
	TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_PERIOD;	
	// 驱动CNT计数器的时钟 = Fck_int/(psc+1)
	TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_PSC;	
	// 时钟分频因子 ,配置死区时间时需要用到
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;		
	// 计数器计数模式,设置为向上计数
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;		
	// 重复计数器的值,没用到不用管
	TIM_TimeBaseStructure.TIM_RepetitionCounter=0;	
	// 初始化定时器
	TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);

	/*--------------------输出比较结构体初始化-------------------*/	
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	// 配置为PWM模式1
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	// 输出使能
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	// 输出通道电平极性配置	
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	
	// 输出比较通道 1
	TIM_OCInitStructure.TIM_Pulse = GENERAL_TIM_CCR1;
	TIM_OC1Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC1PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 输出比较通道 2
	TIM_OCInitStructure.TIM_Pulse = GENERAL_TIM_CCR2;
	TIM_OC2Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC2PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 输出比较通道 3
	TIM_OCInitStructure.TIM_Pulse = GENERAL_TIM_CCR3;
	TIM_OC3Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC3PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 输出比较通道 4
	TIM_OCInitStructure.TIM_Pulse = GENERAL_TIM_CCR4;
	TIM_OC4Init(GENERAL_TIM, &TIM_OCInitStructure);
	TIM_OC4PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
	
	// 使能计数器
	TIM_Cmd(GENERAL_TIM, ENABLE);
}

/**
  * @brief  通用定时器PWM输出用到的GPIO和PWM模式初始化
  * @param  无
  * @retval 无
  */
void GENERAL_TIM_Init(void)
{
	GENERAL_TIM_GPIO_Config();
	GENERAL_TIM_Mode_Config();		
}

1.2、调试

在这里插入图片描述
选择调试
在这里插入图片描述

逻辑分析器选择:Logic Analyzer
在这里插入图片描述
设置输出管脚(根据自己情况):
在这里插入图片描述

运行:

在这里插入图片描述

示波器:
在这里插入图片描述

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

STM32的PWM和DAC练习 的相关文章

  • Windows环境下安装PyMySQL(已安装Anaconda)

    我的Anaconda安装目录为D Anaconda3 在cmd中执行 会出现 随后输入pip 会出现等 随后输入
  • “真正的机会”:ChatGPT 如何帮助大学申请者

    随着平权行动的结束 生成式人工智能可以为没有导师或辅导员的学生提供帮助 从而实现招生 民主化 关于人工智能的争论主要分为三个基本类别 焦虑的不确定性 它会夺走我们的工作吗 存在的恐惧 它会杀死我们所有人吗 和简单的实用主义 人工智能可以写我
  • C语言实现Unix时间戳和北京时间的相互转换(已编译,亲试可用~)

    目录 一 什么是Unix时间戳 二 应用C语言库函数 三 C语言实现Unix时间戳与北京时间的相互转换 一 什么是Unix时间戳 1 Unix时间戳是从1970年1月1日 UTC GMT的午夜 开始所经过的秒数 不考虑闰秒 2 Unix时间
  • pyecharts0.5.x制作含地图的数据看板

    引言 pyecharts作为Python的数据可视化包 其强大的功能不言而喻 Python Echart 想想就觉得牛叉 目前pyecharts有两个大的版本 一个是0 5 x版本的 一个是1 0以后版本 而且这两个版本差别很大 如果是有的
  • excel中offset用法

    Excel 中的 Offset 函数用于在当前单元格的基础上 相对偏移指定的行数和列数 返回新单元格的值 该函数的语法如下 OFFSET reference rows cols height width reference 基准单元格 ro
  • python修饰器_Python修饰器

    Python的修饰器的英文名叫Decorator 当你看到这个英文名的时候 你可能会把其跟Design Pattern里的Decorator搞混了 其实这是完全不同的两个东西 虽然好像 他们要干的事都很相似 都是想要对一个已有的模块做一些
  • Failed to resolve packages: Package [com.unity.package-manager-ui@2.1.2] cannot be found. No package

    直接把E UnityProject test Packages manifest json 里面的依赖项删除 最后剩下 dependencies
  • 小红书破局品牌增长:4大阶段+8个种草建议

    品牌如何从激烈的竞争中突围 成为快速增长的 黑马 本文就和大家一起聊聊围绕产品面对不同阶段的人群 种草 策略 希望能够帮助品牌更好地与用户沟通并提升营销效率 实现品效合一 1 种草1 0 立住产品 抢占赛道 品牌现状 成立时间短 用户心中的
  • 基于协同过滤算法的商品推荐购物电商系统

    一 介绍 商品推荐是针对用户面对海量的商品信息而不知从何下手的一种解决方案 它可以根据用户的喜好 年龄 点击量 购买量以及各种购买行为来为用户推荐合适的商品 在本项目中采用的是基于用户的协同过滤的推荐算法来实现商品的推荐并在前台页面进行展示
  • Python图像处理【1】图像与视频处理基础

    图像与视频处理基础 0 前言 1 在 3D 空间中显示 RGB 图像颜色通道 1 1 图像表示 1 2 在 3D 空间中绘制颜色通道 2 使用 scikit video 读 写视频文件 2 1 scikit video 库 2 2 读 写视
  • 新引擎HeatWave将MySQL查询性能提升400倍

    参考资料 https www oracle com a ocom docs mysql heatwave technical brief pdf 前言 我刚去MySQL官方文档查个函数 顺便发现一个新东西 HeatWave 看起来很厉害的样
  • 垃圾代码是如何写出来的

    自我参加工作已经有几年了 接手过的项目也不少 包括安卓端和web前端的 在做这些项目的过程中 相当一部分的项目到最后都出现了一个现象 代码越写越乱 维护性越来越差 究其原因 我认为有如下几点 1 程序员自身能力 出现问题 首先得从自己身上找
  • Matlab实现基于BP神经网络的数据分类预测

    matlab语言实现基于BP神经网络的数据分类预测 四分类 其步骤如下 一 载入原始数据 这里以测试数据存放在Excel表格中为例 导入数据 res xlsread 数据集 xlsx 二 将数据集划分为训练集和测试集 temp randpe
  • Kafka3.0.0版本——手动调整分区副本示例

    目录 一 服务器信息 二 启动zookeeper和kafka集群 2 1 先启动zookeeper集群 2 2 再启动kafka集群 三 手动调整分区副本 3 1 手动调整分区副本的前提条件 3 2 手动调整分区副本的示例需求 3 3 手动
  • 实现FPGA Verilog HDL与NIOS II的通信数据交换——利用AVALON总线

    平时用FPGA基本都是全程用Verilog HDL编程 当遇到液晶的时候 发现Verilog的还不如C语言来的方便 但是用NIOS来编写的时候 实现NIOS与Verilog的通信又是一个问题 今天用了两种方法实现Verilog与NIOS通信
  • C#Socket编程服务器和多客户端通信,客户端和客户端通信

    对于Socket编程 网上资料 博文一抓一大把 不过大多数都是简单讲解单客户端和服务端通信的实例 这里主要给大家展现一下在 net平台上用窗体程序实现的过程 不过比较有特点的是会告诉大家如何实现不同客户端之间的通信 它们如何通过一个服务端准
  • 2023年数学建模国赛C题思路+模型+代码+论文

    一 数学建模常用方法 各赛题思路开赛后会第一时间更新 数学建模是将实际问题抽象为数学模型 并利用数学方法进行求解和分析的过程 在数学建模中 常用的模型算法非常多 下面列举了一些常见的模型算法 线性回归 线性回归是一种常见的建模方法 用于建立
  • 【编程测试题】LeetCode single-number

    Given an array of integers every element appears twice except for one Find that single one Note Your algorithm should ha
  • Windows下谨慎使用动态磁盘

    电脑上的硬盘 磁盘 原本为动态分区 昨天换了一块新的1T的硬盘后 就把旧硬盘改装成移动硬盘了 但是改成移动硬盘后电脑无法识别出来 经检测发现是动态分区的问题 结合之前的经历 个人建议要谨慎使用动态磁盘 基本磁盘和动态磁盘 在网上搜 动态磁盘
  • android data文件夹操作

    1 看代码 public class DBTest extends Activity SQLiteDatabase db Button bn null ListView listView Override public void onCre

随机推荐

  • Qt中时间戳和时间的相互转换关系

    以下内容摘抄博客 https www cnblogs com simp p 17236018 html include
  • 【转】Codeblocks MinGW 配置openCV

    Code Blocks is an GPL based and cross platform IDE This is the tutorials using Code Blocks with OpenCV Create a simple c
  • sublime text3 自定义配色方案

    可以实现自定义修改配色方案 生成下载 绝对github上的神器 自定义配色方案 修改保存后 下载后缀为tmTheme的文件 然后打开Sublime Text 点击菜单栏的首选项 gt 浏览插件 此时会弹出一个窗口 路径大概就是 Sublim
  • VS工作目录,输出目录

    默认情况下 输出目录 和 输出文件 两个属性对应的目录是一样的 这样用着方便 当然 输出文件的值在输出目录的值的基础上还包含有exe文件名 如果两个不一样 则中间生成的链接器用的如xx ilk和xx pdb文件等在输出目录 而最终生成的xx
  • C语言 分支与循环语句 上

    3 5 表达式语句 printf hehe n 函数调用语句 空语句 有时候我们需要一条语句 但是这条语句什么都不需要做 叫做空语句 return 0 分号隔开的是一条语句 用一条语句加一个分号 控制语句用于控制程序的执行流程 以实现程序的
  • Windows 10 中的 BitLocker问题

    最近安装双系统 遇到了BitLocker的问题 被windows狠狠地恶心了一把 这里记录下来 后面的兄弟们不要躺坑 1 BitLocker是什么东西 就是这个界面 首先 这里有微软官方的解释 链接 总结来说就是一种加密方式 实质上个人理解
  • Angular4对cookie的操作

    cookie详细方法及使用 time number 2 60 60 1000 cookie过期时间两个小时 2 60 60 1000 储存cookie this cookieService set userId this userId ne
  • 【大数据】HiveQL:视图

    HiveQL 视图 视图可以允许保存一个查询 并向对待表一样对这个查询进行操作 这是一个逻辑结构 因为它不像一个表会存储数据 换句话说 Hive 目前暂不支持物化视图 当一个查询引用一个视图时 这个视图所定义的查询语句将和用户的查询语句组合
  • 首次域名注册

    什么是域名 域名是Internet网络上的一个服务器或一个网络系统的名字 在全世界 没有重复的域名 域名的形式是以若干个英文字母或数字组成 由 分隔成几部分 如 56dr cn 就是一个域名 域名与网址有什么区别 一个完整网址范例如下 ht
  • 如何评价代码的好坏?

    我们一般从可维护性 可读性 可扩展性 可测试性 可复用性 简洁性来评价代码的质量 可维护性 所谓维护无外乎就是修改bug 修改老的代码 添加新的代码之类的工作 代码易维护指的是在不破坏原有代码设计 不引入新的bug的前提下 能够快速的修改或
  • python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在 python 中赋值语句总是建立对象的引用值 而不是复制对象 因此 python 变量更像是指针 而不是数据存储区域 这点和大多数 OO 语言类似吧 比如 C java
  • JAVA基础学习笔记1

    教程来源 https www runoob com java java tutorial html 以下是个人学习笔记 用水平线划分小节 我的第一个JAVA程序 通常都写成这样 public class HelloWorld public
  • Spring Boot -01- 快速入门篇(详解图文教程)

    作者 肖朋伟 来源 https blog csdn net qq 40147863 article details 84194493 Spring Boot 01 快速入门篇 图文教程 今天开始不断整理 Spring Boot 2 0 版本
  • Windows安装Ubuntu双系统(Win11+最新Ubuntu22.04.1LTS)

    目录 前言 一 查看基础环境 二 准备安装文件 1 下载Ubuntu 22 04 01 LTS镜像ISO文件 2 下载官方推荐的U盘启动制作工具 3 制作启动U盘 4 新建硬盘分区用来安装Ubuntu系统 5 BIOS设置 三 安装Ubun
  • stata学习笔记①stata基础介绍

    文章目录 一 为什么要学stata 二 软件基本解释 1 软件界面 2 导入示例数据 3 认识几个重要的功能符号 三 数据的基本观测 四 统计性描述 1 codebook 数据字典使用 2 summarize 五 图像初步探索 1 hist
  • 华硕服务器RS720-E10-RS12无法安装win10到M.2的NVME SSD

    进BIOS开启CSM 兼容性支持模块
  • 区块链浏览器与合约代码

    声明 此文系 Vue3 0 Quasar ethers js 和以太坊智能合约交互 系列教程之一 开始 区块链浏览器 在本教程中 我一直在说区块链是去中心化的 它想打造的是一个数据永不可篡改且公开透明的数据世界 那么这样的区块链它最重要的一
  • linemod算法过程理解

    一 提取模板 1 预处理 使用高斯模糊预处理将要作为模板的RGB图 2 模板梯度计算 分别计算RGB三个通道中每个像素点x和y方向的梯度 sobel算子 取幅值最大的作为该像素的梯度 若梯度幅度值小于阈值 则被舍弃 3 梯度离散化及量化 对
  • 01 逻辑回归的理解

    1简介 逻辑回归是一个分类算法 本质是对线性回归做了一个变换 将值域压在0 1的空间 从而可以未每一个特征 估算出一个概率 作预测问题 二分类 逻辑回归问题 本质上就变成 求解变换后的每个特征的权重 ax1 bx2 cx3 0 1 求解模型
  • STM32的PWM和DAC练习

    文章目录 一 输出PWM波形 1 1 实验代码 1 2 调试 一 输出PWM波形 1 1 实验代码 代码来自野火STM32F103 mini开发板资料 1 书籍配套例程 F103RCMINI 32 TIM 高级定时器 3 TIM 高级定时器