当前位置: 首页 > news >正文

细说STM32单片机用定时器触发DAC输出三角波并通过串口观察波形的方法

目录

一、 工程配置

1、时钟、DEBUG、USART2、Project Manager Code Generater

2、DAC1

(1)Mode

(2) DAC out1 Settings

3、TIM3

4、NVIC 

二、软件设计 

三、下载运行

1、串口助手收到的一段三角波数据

2、示波器显示的三角波


        采用定时器TIM3的TRGO信号作为DAC1的触发信号,DAC1在触发信号驱动下输出三角波。通过或示波器观察三角波的波形。

        使用的硬件开发板及其它资源,可以参考本文作者的文章:细说STM32单片机DAC基础及软件启动DAC触发并通过串口观察数据的方法-CSDN博客  https://wenchm.blog.csdn.net/article/details/144127805。

一、 工程配置

1、时钟、DEBUG、USART2、Project Manager Code Generater

        与参考文章相同。

2、DAC1

(1)Mode

        DAC1有2个通道:out1 mode、out2 mode,☐External Trigger。

  • out1 mode,选择Connected to external pin only;
  • out2 mode,Disable;
  • External Trigger,不选择;

(2) DAC out1 Settings

  • Mode selected:Normal;
  • Output Buffer:Enable;设置是否使用输出缓冲器。如果使用输出缓冲器,可以降低输出阻抗并提高输出的负载能力。默认设置为Enable。
  • DAC High Frequency:Automatic;
  • DMA Double Data:Disable;
  • Signed Format:Disable;
  • Trigger:Timer3 Trigger out event;使用定时器TIM3的TRGO信号作为DAC1触发信号源。
  • Trigger2:None;
  • Wave Generation Mode:Triangle wave generation;
  • Maximum Triangle Amplitude:4095;三角波最大幅值是由4位二进制表示的参数,表示1~4095内某个固定的参数值,如1、3、7、127、511、2047、4095等,这里设置为4095。
  • User Trimming:Factory Trimming;

 

3、TIM3

  •  TIM3 Mode:Internal Clock;
  • Prescaler:1700;
  • Counter Mode:Up;
  • Period:9;
  • auto_reload:Enable;
  • TRGO:Update Event;

4、NVIC 

  • 调整TimeBase的优先级为0; 
  • 开启定时器TIM3的满溢中断,抢占式优先级为1;

        设置TIM3的满溢中断,目的是当中断发生时,读取DAC数据,并通过串口发送到串口助手。

二、软件设计 

        只需设计main.c。

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
/* USER CODE BEGIN PV */
uint32_t DCValue=0;	//12bits,DC component,0V
/* USER CODE END PV */
 /* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim3);		//Start TIM3 and trigger DAC1 to periodically output DAC value.HAL_DACEx_TriangleWaveGenerate(&hdac1, DAC_CHANNEL_1, DAC_TRIANGLEAMPLITUDE_4095);HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);//start DAC1HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, DCValue);  // set to output DAC value/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{DCValue = HAL_DAC_GetValue(&hdac1, DAC_CHANNEL_1);printf("DAC1 value = %ld\r\n",DCValue);
}//串口打印
int __io_putchar(int ch)
{HAL_UART_Transmit(&huart2, (uint8_t*)&ch, 1, 0xFFFF);return ch;
}
/* USER CODE END 4 */

三、下载运行

1、串口助手收到的一段三角波数据

2、示波器显示的三角波


http://www.mrgr.cn/news/79010.html

相关文章:

  • HDFS 操作命令
  • git推送多个仓库
  • 智能运维在配电所设备监控中的应用与洞察
  • 使用go语言写一个脚本 实现WebSockt连接 用户发送a 得到返回b
  • Spark常问面试题---项目总结
  • 【MySQL 进阶之路】索引的使用
  • RealESRGAN技术详解(附代码)
  • DIY搭建网站(学术个人介绍主页)
  • HTML5+JavaScript实现连连看游戏
  • FreeRTOS之ARM CR5栈结构操作示意图
  • MATLAB提供的窗函数
  • Alibaba Druid(简称Druid)
  • Android KEY的哪些事儿
  • CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)
  • 链表的分类以及双向链表的实现
  • 十二、消息队列-MQ
  • 国产CPU 安装Windows可行性操作
  • Redis 之持久化
  • 将空白背景透明化
  • 【C++笔记】map和set的使用
  • 【ETCD】ETCD用户密码认证
  • Mac安装MINIO服务器实现本地上传和下载服务
  • 使用Tomcat搭建简易文件服务器
  • Ansible 运维工具
  • 零基础快速掌握——【c语言基础】数组的操作,冒泡排序,选择排序
  • 我们来学mysql -- 事务并发之脏写(原理篇)