久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10820|回復: 0
打印 上一主題 下一主題
收起左側

STM32F4__定時器溢出觸發DAC轉換DMA傳輸

[復制鏈接]
跳轉到指定樓層
樓主
ID:90014 發表于 2015-9-14 18:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*
    全部工程奉上 注釋完美
*/



/* 添加 DAC 的頭文件                                                                                          */


#include "dac.h"


/* 定義DAC數據全局變量 */
uint16_t DAC_Buff[2]={0xfff<<4,0<<4};


/*
        串口初始化配置 無返回值 無參數
        初始化USART1 TX---GPIOA9   RX---GPIOA10
        波特率:115200
        奇偶校驗:無
        停止位:1
        硬件流失能
        8位數據位
        使能發送
*/
void USART_Configuration(void)
{
        /* 定義USART初始化結構體 */
       
        USART_InitTypeDef        USART_InitStructure;
       
        /* 失能GPIOA 時鐘 */
       
        RCC->AHB1ENR|=RCC_AHB1Periph_GPIOA;
       
        /* 失能USART1的時鐘 */
       
        RCC->APB2ENR|=RCC_APB2Periph_USART1;
       
        /* 設置 GPIOA9 GPIOA10 為復用模式 */
       
        GPIOA->MODER|=GPIO_Mode_AF<<2*9|GPIO_Mode_AF<<2*10;
       
        /* 復用 GPIOA9 到USART1 */
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
       
        /* 復用 GPIOA10 到 USART1 */
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
       
       
        USART_InitStructure.USART_BaudRate=115200; /* 配置波特率為115200 */
       
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; /* 硬件流失能 */
       
        USART_InitStructure.USART_Mode=USART_Mode_Tx; /* USART1模式為發送模式 */
       
        USART_InitStructure.USART_Parity=USART_Parity_No; /* 奇偶校驗失能 */
       
        USART_InitStructure.USART_StopBits=USART_StopBits_1; /*  停止位為1位 */
       
        USART_InitStructure.USART_WordLength=USART_WordLength_8b; /* 數據長度為8位 */
       
        /* 根據USART_InitStructure 結構體初始化 USART1 */
       
        USART_Init(USART1,&USART_InitStructure);
       
        /* 開啟USART1 */
       
        USART_Cmd(USART1,ENABLE);
       
}


/*
        重映射USART1到printf
        使printf能打印數據到串口
        無參數 返回打印的字符串
*/


int fputc(int ch, FILE *f )
{
        /* 給USART1->DR 賦值就可以將數據發送出去 */
       
        USART1->DR=ch;
       
        /* 等待數據發送完畢 */
       
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
       
        /* 返回發送成功的數據 */
       
        return ch;
       
}


/*
        TIM2基本功能初始化函數
        參數:無
        返回值:無
*/


void TIM_Configuration(void)
{
        /* 定義設置TIM2的結構體 */
       
        TIM_TimeBaseInitTypeDef        TIM_TimeBaseStructure;
       
        /* 使能 TIM2 的時鐘 */
       
        RCC->APB1ENR|=RCC_APB1Periph_TIM2;
       
        TIM_TimeBaseStructure.TIM_ClockDivision=0; /* 時鐘不分割 */
       
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 計數器為向上計數模式 */
       
        TIM_TimeBaseStructure.TIM_Period=9999; /* 經過9999+1個脈沖溢出一次 */
       
        TIM_TimeBaseStructure.TIM_Prescaler=8399; /* 時鐘分頻值為8399+1=8400 */
       
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0; /* 重復計數器設置為0 */
       
        /* 使用配置好的結構體初始化TIM2 */
       
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
       
        /* 啟動計數器 */
       
        TIM_Cmd(TIM2,ENABLE);
       
          /* 配置TIM2觸發源 */
          
        TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);


        /* 開啟TIM2 溢出中斷 */
       
//        TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
       
}


/*
        DAC初始化函數
        參數:無
        返回值:無
        DAC 通道1 對應GPIOA4
*/


void DAC_Configuration(void)
{
        /* 定義 DAC 初始化的結構體 */
       
        DAC_InitTypeDef        DAC_InitStructure;
       
        /* 開啟DAC 時鐘 */
       
        RCC->APB1ENR|=RCC_APB1Periph_DAC;
       
        /* 開啟 GPIOA 時鐘 */
       
        RCC->AHB1ENR|=RCC_AHB1Periph_GPIOA;
       
        /* GPIOA4 設置為模擬輸入 */
       
        GPIOA->MODER|=GPIO_Mode_AIN<<2*4;
       
        DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0; /* 屏蔽幅值 設置 */
       
        DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Enable; /* 啟用輸出緩沖 */
       
        DAC_InitStructure.DAC_Trigger=DAC_Trigger_T2_TRGO; /* 使用TIM2的溢出觸發DAC */
       
        DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None; /* 不使用波形發生器 */


        /* 配置DAC的通道1 */
       
        DAC_Init(DAC_Channel_1, &DAC_InitStructure);
       
        /*啟動DAC的通道1 */
       
        DAC_Cmd(DAC_Channel_1,ENABLE);
       
        /* 設置DAC通道1 數據12位右對齊 輸出0對用的模擬電壓*/
       
        DAC_SetChannel1Data(DAC_Align_12b_R,0);
       
}


/*
        DMA配置為 為DAC傳送數據
        參數;無
        返回值:無
*/


void DMA_Configuration(void)
{
        /* 定義設置DMA的結構體 */
       
        DMA_InitTypeDef        DMA_InitStructure;
       
        /* 開啟DMA1的時鐘 */
       
        RCC->AHB1ENR|=RCC_AHB1Periph_DMA1;
       
        DMA_InitStructure.DMA_Channel = DMA_Channel_7; /* 通道選擇DAC1 */
       
        DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t)&(DAC->DHR12R1); /* DMA外設地址 DAC通道1數據12位右對齊寄存器 [15:4] */
       
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DAC_Buff; /* DMA 存儲器0地址 */


        DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; /* 存儲器到外設模式 */
       
        DMA_InitStructure.DMA_BufferSize = 2; /* 數據傳輸量 */


        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /*外設非增量模式 */
       
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable ;//DMA_MemoryInc_Enable; /* 存儲器增量模式 */
       
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; /* 外設數據長度:16位 */
       
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; /* 存儲器數據長度:16位 */
         
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /* 使用循環模式 */
       
        DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; /* 中等優先級 */
       
        DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; /* 不使用FIFO */        
       
        DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; /* 不使用FIFO */
       
        DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; /* 存儲器突發單次傳輸 */
       
        DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; /* 外設突發單次傳輸 */
       
        /* 初始化DMA Stream DMA1 的第5個流的通道7 */
       
        DMA_Init(DMA1_Stream5,&DMA_InitStructure);
       
        /* 啟動DAM1的通道5 */
       
        DMA_Cmd(DMA1_Stream5,ENABLE);
       
        /* 清除DMA傳輸完成標記 */
       
//        DMA_ClearITPendingBit(DMA2_Stream5,DMA_IT_TCIF7);


        /* 開啟DMA傳輸完成中斷 */


//        DMA_ITConfig(DMA2_Stream7,DMA_IT_TC,ENABLE);


        /* 使能DAC的DMA請求 */
       
        DAC_DMACmd(DAC_Channel_1,ENABLE);


}













分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产日韩91久久久久久 | 在线不卡一区 | 国产精品一区二区在线免费观看 | 久久伊人久久 | 日本一区二区三区免费观看 | 亚洲一区二区三区在线视频 | 国产欧美日韩一区二区三区在线观看 | 中文在线www | 综合精品在线 | 99热碰| 干干干操操操 | 日日摸天天添天天添破 | 久久成人国产精品 | 国产欧美性成人精品午夜 | 成人免费网站视频 | 欧美日韩久久精品 | 日韩电影中文字幕在线观看 | 久久999 | 久久99蜜桃综合影院免费观看 | 国产三级一区二区三区 | 亚洲免费在线 | jizz在线看片 | 亚洲精品一区av在线播放 | 一区二区中文字幕 | 男人的天堂在线视频 | 久久se精品一区精品二区 | 久久精品—区二区三区 | 国产乱人伦精品一区二区 | 一区二区在线 | 日韩综合 | 91精品国产手机 | 欧美激情综合 | 先锋资源网站 | 日韩在线播放网址 | 一区二区免费 | 成人在线免费 | h视频免费在线观看 | 国产高清视频在线播放 | 在线免费观看视频你懂的 | 视频一二三区 | 色呦呦网站 |