这两天复习了DAC,DMA再加上把基本定时器TIM6和TIM7看了一下,打算写一个综合点的程序,,,就在网上找了一些关于DAC,DMA和定时器相关的程序,最终打算写了输出正弦波的程序。。。

  由于没有示波器,也就不能显示出效果了,本来是打算用软件调试看效果的,但TIM6总是出问题,CNT不自增,可是我真的找不出TIM6有什么错误,,,后来在网上发现许多道友遇到同样的问题,有人说TIM6不支持软件调试,不知道是不是这么回事,,没办法,没示波器,软件调试又不行,自己本身也不想耽搁复习的进程,也就不纠结于此了

整体上应该是对的

  程序:

#include "dac.h"
#include "stm32f10x.h"

void DAC1_Init()
{
RCC->APB2ENR |= 1 << 2; //

GPIOA->CRL &= 0xfff0ffff; //PA4模拟输入

DAC->CR &= 0x00000000; //清零
DAC->CR |= 1 << 12; //DMA使能
DAC->CR |= 0 << 6; //TIM6 TRGO触发
DAC->CR |= 1 << 2; //开启触发使能
DAC->CR |= 1 << 1; //关闭输出缓存
DAC->CR |= 1 << 0; //开启DAC1

}

#include "dma.h"
#include "stm32f10x.h"

//pscadr 外设地址
//memaddr存储器地址
//numbyte传输字节数
void DMA_Init(u32 pscadr,u16 memaddr,u16 numbyte)
{
RCC->AHBENR |= 1 << 0; //开启DMA1的时钟

DMA1_Channel1->CCR &= 0xFFFF0000;
DMA1_Channel1->CCR |= 3 << 12; //优先级最高
DMA1_Channel1->CCR |= 1 << 10; //存储器16位数据
DMA1_Channel1->CCR |= 1 << 8; //外设16位数据
DMA1_Channel1->CCR |= 1 << 7; //存储器自增
DMA1_Channel1->CCR |= 0 << 6; //外设不自增
DMA1_Channel1->CCR |= 1 << 5; //循环
DMA1_Channel1->CCR |= 1 << 4; //从存储器读

DMA1_Channel1->CNDTR |= numbyte ;

DMA1_Channel1->CMAR |= memaddr ;
DMA1_Channel1->CPAR |= pscadr ;

DMA1_Channel1->CCR |= 1 << 0; //通道开启
}

void TIM6_Init(u16 arr,u16 psc)
{
RCC->APB1ENR |= 1 << 4;

TIM6->CR1 &= 0xFF00;
TIM1->CR1 |= 1 << 7; //自动重装载
TIM6->CR1 |= 0 << 3; //非单脉冲模式

TIM6->CR2 |= 2 << 3; //更新事件用作TRGO

TIM6->PSC |= psc;
TIM6->ARR |= arr;

TIM6->CR1 |= 1 << 0;
}

#include "timer.h"
//#include "exti.h"
#include "dma.h"
#include "dac.h"

/* 波形数据 ---------------------------------------------------------*/
const unsigned short Sine12bit[32] = {
2448,2832,3186,3496,3751,3940,4057,4095,4057,3940,
3751,3496,3186,2832,2448,2048,1648,1264,910,600,345,
156,39,0,39,156,345,600,910,1264,1648,2048};

#define DAC_DHR12R1_ADDR DAC_BASE + 8           //DAC_DHR12R1寄存器地址

int main()
{
LED_Init ();
delay_init (72);
TIM6_Init(19,0);
DAC1_Init();
DMA_Init(DAC_DHR12R1_ADDR,(unsigned short)Sine12bit,32);
while(1);
}

重学STM32---(六)DAC+DMA+TIM的更多相关文章

  1. STM32 F4 DAC DMA Waveform Generator

    STM32 F4 DAC DMA Waveform Generator Goal: generating an arbitrary periodic waveform using a DAC with ...

  2. STM32之DAC君

    如花说得好:呃呃呃.是俗话说得好:有了ADC,怎可少了DAC..我觉得奇怪.今天我开头就直奔主题了.我想了想,总结了一句话:孙悟空纵然有七十二变.无论是变成猫也好,变成狗也罢.始终还是会变回他本身.所 ...

  3. 重学前端 --- Promise里的代码为什么比setTimeout先执行?

    首先通过一段代码进入讨论的主题 var r = new Promise(function(resolve, reject){ console.log("a"); resolve() ...

  4. STM32之串口DMA接收不定长数据

    STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口 ...

  5. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  6. 重学 Java 设计模式:实战单例模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 5个创建型模式的最后一个 在设计模式中按照不同的处理方式共包含三大类:创建型模式.结 ...

  7. 重学 Java 设计模式:实战适配器模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 擦屁屁纸80%的面积都是保护手的! 工作到3年左右很大一部分程序员都想提升自己的技术 ...

  8. 重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)

    作者:小傅哥 博客:https://bugstack.cn - 编写系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么你的代码那么多ifelse 同类的业务.同样的功能, ...

  9. 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...

随机推荐

  1. 获取IE代理服务器信息

    “局域网设置”里有自动配置.代理服务器的设置项目,在进行网络通讯相关的开发时,需要使用到它们,下边介绍如何将这些设置信息读取出来. 当“使用自动配置脚本”不使用时,使用WinHttpGetIEProx ...

  2. web开发常用的js验证,利用正则表达式验证邮箱、手机、身份证等输入

    正则表达式验证 //邮箱 \-])+\.)+([a-zA-Z0-]{,})+$/; email = document.getElementById("email").value; ...

  3. TFS错误 TF31004:在连接带xxx.xxx.xxx.xxx上的Team Foundation Server时遇到错误。请等待几分钟,然后重试。如果问题仍然存在,请与服务器管理员联系

  4. Time, Clocks, and the Ordering of Events in a Distributed System

    作者:Leslie Lamport(非常厉害的老头了) 在使用消息进行通信的分布式系统中,使用物理时钟对不同process进行时间同步与事件排序是非常困难的.一是因为不同process的时钟有差异,另 ...

  5. 使用Chef管理windows集群 | 运维自动化工具

    但凡服务器上了一定规模(百台以上),普通的ssh登录管理的模式就越来越举步维艰.试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,如果没有一种自动化方式,那么至少要耗上大半 ...

  6. C#中三种定时器对象的比较

    ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers ...

  7. MyEclipse 修改代码不生效

    最近得了一个项目,java开发的web项目,修改代码时,无论怎么改,都不生效: 各种度娘,没用. 原因是没有建立发布设定 这个东西我开始不理解它的作用,现在知道了: mysqleclipse项目在一个 ...

  8. Python背景色与语法高亮主题配置

    使用python idle的人恐怕都无法忍受默认的白色背景,及其语法高亮主题. 大家更倾向于使用黑色背景. 用户目录 的.idlerc 目录: 下面的各个系统下对应的该文件的位置: 在Linux系列系 ...

  9. 在其他页面调用 Discuz 7.2 BBS 论坛会员登录信息

    require_once './bbs/include/common.inc.php'; $discuz_uid 是用户ID $_DSESSION是用户所有信息

  10. Linux - gcc和g++的区别

    一般linux系统都自带了gcc编译器的,你可以用你的安装光盘去安装,如果你是觉得自带的gcc版本太低了,可以去gcc的官方网站可以下载到,编译需要很长的时间,如果你只编译C或者C++可以只下载gcc ...