重學STM32---(六)DAC+DMA+TIM


  這兩天復習了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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM