STM32 CubeMX生成DAC+DMA+TIM生成正弦波

2023-05-16

1.首先配置好系统时钟

2.打开DAC

3.配置DMA,在DAC中的"DMA Setting"选项卡中添加DMA,DMA模式选择循环模式

4.配置定时器,在第二步中选择的是TIM6 ,在第一步中设置的定时器频率是36MHz,这里进行总共12000倍分频,最终结果是3KHz频率.    ( 36000000/1000/12=3000Hz).这里设置的只是DMA的触发频率,

注意:不是正弦波的频率.

5.写一个正弦波生成函数  或者  创建一个数组写入正弦波表用,查表法.都可以网上有很多例子.这里举个正弦波生成函数的例子:

//num:要在一个正弦波中采集多少点
//*D:创建的一个数组用来存放正弦波各个点的数值的
//U:输出电压的峰值(0~1.5V)
//Pi:3.1415926 自己定义
void SineWave_Data( u16 num,u16 *D,float U)
{
    u16 i;
    for( i=0;i<cycle;i++)
    {
        D[i]=(u16)((U*sin(( 1.0*i/(num-1))*2*Pi)+U)*4095/3.3);
    }
}

6.最后就是在主函数里启动定时器,启动DMA.这用的是正弦波生成函数,要先调用下生成正弦波表.

这里用的是100个点的正弦波表,所以最后生成的正弦波的频率是 ( f=3000/100=30Hz.)

SineWave_Data(100,DualSine12bit,1.2);
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t *)DualSine12bit,DL,DAC_ALIGN_12B_R);

DMA触发一次修改一次DAC的输出值,触发100次完成一个正弦波,故用DMA的触发频率再除以100就是生成的正弦波的频率.

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

STM32 CubeMX生成DAC+DMA+TIM生成正弦波 的相关文章

  • TX2安装ROS系统成功记录

    TX2安装ROS系统成功记录 前言一 确认安装的ROS版本二 安装步骤1 设置sources list2 设置密钥3 安装4 环境配置4 安装构建功能包的依赖 三 测试总结 前言 因导师项目 xff0c 需要将在电脑上开发的算法移植到TX2
  • 实现js程序在vscode控制台输出的方法(看完方便多了)

    当我们想要写一段js代码时 xff0c 我们可能会在vscode中新建一个html文件 xff0c 然后再script标签下去编写js代码 xff0c 完了之后我们想要看看js打印输出的效果 xff0c 还会通过浏览器的 F12 去查看输出
  • 总结C++中取成员函数地址的几种方法

    总结C 43 43 中取成员函数地址的几种方法 这里 我整理了4种C 43 43 中取成员函数地址的方法 第1 2 4种整理于网上的方法 第3种cdecl cast是我自己想到的 其中 第4种 汇编 的方法不能在VC6上编译通过 推荐使用第
  • 移动程序后出现Cannot resolve symbol AppCompatActivity等错误

    移动android studio 程序包到不同电脑后 xff0c 出现Cannot resolve symbol AppCompatActivity等错误 xff0c 网上有说没有包含lib包 import android support
  • Gradle sync failed: Could not GET gradle-3.0.0-beta4.pom

    在不电脑间移动android工程项目时出现Gradle sync fail Could not resolve com android tools build gradle 3 0 0 beta4 以为是android studio版本的问
  • undefined reference to `dlopen' 等dlfcn.h类问题的另一种错误解决

    linux下或者android下编程经常遇到dlopen dlclose等未定义函数 xff0c 其实 只要我们链接上dl库就可以解决这个问题 xff0c 在makefile 加上 ldl选项 xff0c 便可以解决这个问题 很多文章都讲
  • openwrt交叉编译libffi zlib libiconv gettext glib gstreamer

    libffi 如果你是直接从git托管源构建libffi xff0c 那么configure还不存在 首先运行 autogen sh 这将要求您安装autoconf xff0c automake和libtool 您可能想要告诉configu
  • Python中链表、栈、队列、二叉树的封装

    Python中链表 栈 队列 二叉树的封装 1 链表的封装2 栈的封装3 队列4 二叉树的封装 1 链表的封装 链表是一种物理存储单元上非连续 非顺序的存储结构 xff0c 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结
  • 进程中产生僵尸和孤儿

    孤儿进程 父进程先于子进程结束 xff0c 则子进程成为孤儿进程 xff0c 子进程的父进程成为init进程 xff0c 称为init进程领养孤儿进程 孤儿进程其实对于操作系统来说是没有太大的危害 xff0c 在孤儿进程中父进程结束了之后
  • C++Primer Plus第6版&C Primer Plus第6版 中文版免费分享啦

    最近在学习C 43 43 xff0c 用的资料是师兄分享的经典书籍 C 43 43 Primer Plus第6版中文版 的PDF xff0c 自带书签 xff0c 使用很方便 但师兄说这个是他在网上花了积分才下载下来的 xff0c 这让我很
  • www服务器是什么

    WWW是一种服务 我们在浏览器的地址栏里输入的网站地址叫做URL Uniform Resource Locator xff0c 统一资源定位符 就像每家每户都有一个门牌地址一样 xff0c 每个网页也都有一个Internet地址 当你在浏览
  • 快速配置VSCode(Visual Studio Code) C/C++开发环境

    简介 VSCode只是一个纯文本编辑器 editor xff0c 不是IDE 集成开发环境 xff0c 不含编译器 compiler 和许多其他功能 xff0c 所以需要自己先搭建环境 但是对小白朋友来说 xff0c 面对一堆的环境变量操作
  • c++:如何定义一个头文件来使用类

    定义自己的头文件 定义类为了方便起见 xff0c 一般不在某个函数内部去定义 要在不同文件中使用同一个类 xff0c 类的定义就必须保持一致 因此考虑拆分一个类 xff0c 在头文件内声明类和其中的成员函数 xff0c 在源文件中写该类的实
  • Ubuntu can口状态检查

    1 配置can0 设置比特率 sudo ip link set can0 type can bitrate 250000 2 打开can0 sudo ip link set can0 up 3 查看 信息 ip details link s
  • Arduino读取DHT11的温湿度显示在基于I2C的1602上

    背景摘要 又到了周末 xff0c B站的番还未更新 闲来无事 xff0c 搞搞吃灰已久的Arduino 南方的冬天真冷啊 xff0c 测测屋子里的温湿度怎么样 xff01 为了测量屋子里的温湿度 xff0c 就用简单大方的Arduino x
  • 终于解决:CUDA: OpenCV requires enabled ‘cudev‘ module from ‘opencv_contrib‘

    把opencv contrib放到opencv文件夾下就行了 編譯到99 時會卡好久 大概半個小時 16線程的CPU 耐心等待即可 編譯的選項 cmake D CMAKE INSTALL PREFIX 61 usr local D CMAK
  • rviz出现Transform [sender=unknown_publisher]For frame [hokuyo_link]: Fixed Frame [map] does not exist

    这是因为本身建模的时候没有用tf包工具发布global fixed frame到topic所在坐标系的tf关系 xff0c 通俗来讲就是模型fixed frame与rviz的不匹配 解决办法 xff1a 修改Fixed frame xff0
  • 镜像后的图片的ORB特征提取

    原图1 xff0c 原图2 xff0c 水平镜像后的原图2 xff1a 用opencv4自带的ORB提取 xff1a 所有的配对如下 筛选后的配对如下 xff1a 可见 xff0c 过滤了一些匹配错误特征点 xff0c 但是还是有很多错误的
  • 构造函数与重载构造函数

    发现slam程序里有个这种写法 在mappoint h中写的如下 MapPoint XXX 重载构造函数 一个默认 new的时候用 一个含参 MapPoint long id Vec3 position 在mappoint cpp中有含参构
  • 内存指针mm_struct

    我们在使用fork 产生了一个子进程 xff0c 子进程和父进程都是执行的相同的代码 xff0c 此时我们又是如何进程执行的呢 虚拟地址空间和物理内存 这就是我们的虚拟地址空间 xff0c 他实际上是使用一个结构体mm struct结构体去

随机推荐