历史上的今天
今天是:2024年09月20日(星期五)
2018年09月20日 | stm32f407之DAC(操作寄存器)
2018-09-20 来源:eefocus
DAC
Stm32f4内嵌的DAC是12位数字输入,电压输出的数模转换器。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。
主要特点:
2个DAC转换器:每个转换器对应1个输出通道
8位或者12位单调输出
12位模式下数据左对齐或者右对齐
同步更新功能
噪声波形生成
三角波形生成
双DAC通道同时或者分别转换
每个通道都有DMA功能
外部触发转换
输入参考电压VREF+
设置步骤:
1. 设置相关GPIO(PA4、5)。
2. 若时钟源为TIMx更新事件,则设置TIMx。
3. 使能DAC时钟
4. 设置触发源,开启相关触发通道,如果用DMA,是否允许数据错误中断。
5. 如果用DMA。配置相关DMA数据流。
程序:
[plain] view plaincopy
/************************************
标题:DAC
软件平台:IAR for ARM6.21
硬件平台:stm32f4-discovery
主频:168M
author:小船
data:2012-02-12
*************************************/
#include
#include "MyDebugger.h"
#include "sintable.h"
void main ()
{
SCB->AIRCR = 0x05FA0000 | 0x400; //中断优先级分组 抢占:响应=3:1
/***GPIO设置***/
RCC->AHB1ENR |= (1<<0); //打开GPIOA时钟
GPIOA->MODER |= 0x00000F00;//PA4、5模拟模式
GPIOA->PUPDR &= 0xfffff0ff;//无上拉无下拉
/***定时器设置***/
RCC->APB1ENR |= (1<<4);//打开TIM6时钟
TIM6->PSC = 0;
TIM6->ARR = 83; //使得更新事件频率为1m
TIM6->CR2 |= 0x00000020;//更新事件输出
TIM6->CR1 |= 1; //开始计时
/***DAC设置***/
RCC->APB1ENR |= (1<<29); //使能DAC时钟
DAC->CR &= 0xffff0000;
/*
使能DMA堵塞中断
使能通道1触发
*/
DAC->CR |= ( (1<<13) | (1<<2) );
NVIC->IP[54] = 0xA0;
NVIC->ISER[1] |= (1<<(54-32));
/***DMA设置***/
RCC->AHB1ENR |= (1<<21); //使能DMA1时钟
DAC->CR &= ~(1<<12);//DAC dma发送模式除能
DMA1_Stream5->CR &= 0xFFFFFFFE; //除能DMA1_Stream5
while(DMA1_Stream5->CR & 0x00000001);//确保DMA可以被设置
DMA1->HIFCR |= 0x000004f0;//传送前清空DMA1_Stream5所有中断标志
DMA1_Stream5->PAR = (uint32_t)&DAC->DHR12R1;//设置外设地址
DMA1_Stream5->M0AR = (uint32_t)SinTable; //设置内存地址
DMA1_Stream5->CR |= 0x0002800;//16位数据
DMA1_Stream5->NDTR = 1024; //设置dma传输数据的数量
/*
设置dma通道7,即DAC1
优先级Medium
传输方向内存到外设
内存递增模式
循环模式
*/
DMA1_Stream5->CR |= ( 0x0e000000 | 0x00010000 | (1<<6)
| (1<<10) | (1<<8) );
DMA1_Stream5->CR |= 1; //DMA数据流5使能
DAC->CR |= (1<<0); //DAC通道1使能
DAC->CR |= (1<<12);//DAC dma发送模式使能
MyDebugger_Init();
while(1)
{
};
}
void TIM6_DAC_IRQHandler(void)
{
if( DAC->SR & (1<<13) )
{
MyDebugger_LEDs(red, on);
DAC->SR &= ~(1<<13);
}
}
史海拾趣
|
我现在有一颗LED需要驱动,6.5V,20mA。 需要做一个驱动器,希望可以控制电流大小,不需要连续调节,只需要在0mA和20mA之间切换就行。怎么做最好? 电源有开关电源可以提高。… 查看全部问答> |
|
This is MicroNotes ,which writed by Kent Walters .Tell you how to select TVS.… 查看全部问答> |
|
现阶段很多朋友,特别是刚出学校的都喜欢用Protell99,这款软件对于来讲自我感觉确实还不错,但是我有很多朋友并不看好它,认为其POWER PCB更为先进… 查看全部问答> |
|
eeworld上可用分怎么计算的,回复一个贴子就有10分可用分?回复自己的贴子有没可用分?戴红花什么意思?奖牌表示什么?eeworld上游戏规则是什么? eeworld上可用分怎么计算的,回复一个贴子就有10分可用分?回复自己的贴子有没可用分?戴红花什么意思?奖牌表示什么?eeworld上游戏规则是什么?… 查看全部问答> |
|
怎样用汇编语言实现辛普森数字积分? 下面是C程序,哪位能帮忙搞个汇编版本的?只要有辛普森函数那部分就可以 /*-------复化辛普森求积公式---------*/ #include #include #include #define N 100 /*-------将要被求积的函数------*/ doubl ...… 查看全部问答> |
|
fsdb文件貌似不能超过2g,问题是我现在有一个数据量很大的仿真case,我又想看看出错的波形,怎么办呢?有没有什么办法把fsdb分成若干小的文件(我用的是modelsim)。请大虾指教!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ...… 查看全部问答> |
|
1.无功功率的影响 (1)无功功率的增加,会导致电流增大和视在功率增加,从而使发电机、变压器及其他电气设备容量和导线容量增加。 。同时,电力用户的起动及控制设备、测量仪表的尺寸和规格也要加大。 (2)无功功率的增加,使总电流增大 ...… 查看全部问答> |
|
小弟有一块显示板不知道能做啥用,能DIY点啥呢?是我表哥送给 我的,据说是三星的面板,是做车载显示的,没 有资料, 上图 不知道发在这板块对不对,不对的请管理员移走 … 查看全部问答> |




