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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8510|回復: 3
收起左側

STM32 DMA傳輸 中斷方式配置 源代碼

[復制鏈接]
ID:198180 發表于 2017-5-9 09:27 | 顯示全部樓層 |閱讀模式
0.png

stm32單片機源程序:
  1. #include "pbdata.h"

  2. void RCC_Configuration(void);
  3. void GPIO_Configuration(void);
  4. void NVIC_Configuration(void);
  5. void USART_Configuration(void);
  6. void ADC_Configuration(void);
  7. void DMA_Configuration(void);

  8. u16 ADCData[50];
  9. u8 ADC_Ok=0;
  10. int fputc(int ch,FILE *f)
  11. {
  12.         USART_SendData(USART1,(u8)ch);
  13.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  14.         return ch;
  15. }

  16. int main(void)
  17. {
  18.    u32 ad=0;
  19.    u8 i=0;

  20.    RCC_Configuration();        //系統時鐘初始化
  21.    GPIO_Configuration();//端口初始化
  22.    USART_Configuration();
  23.    NVIC_Configuration();
  24.    ADC_Configuration();
  25.    DMA_Configuration();
  26.         
  27.    while(1)
  28.    {                        
  29.                 ad=0;        
  30.                 if(ADC_Ok==1)        //通道一傳輸完成否?
  31.                         {
  32.                                 ADC_Ok=0;
  33.                                 for(i=0;i<50;i++)
  34.                                 {
  35.                                         ad=ad+ADCData[i];
  36.                                 }

  37.                                 ad=ad/50;

  38.                                 printf("ad =%f\r\n",3.3/4095*ad);//實際電壓值
  39.                                 delay_ms(1000);
  40.                         }  
  41.    }        
  42. }

  43. void RCC_Configuration(void)
  44. {
  45.    SystemInit();//72m
  46.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  47.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  48.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  49.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  50.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);        
  51.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M  最大14M
  52.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
  53. }

  54. void GPIO_Configuration(void)
  55. {
  56.     GPIO_InitTypeDef GPIO_InitStructure;        
  57.         //LED
  58.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
  59.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  60.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  61.         GPIO_Init(GPIOA,&GPIO_InitStructure);

  62.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
  63.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  64.         GPIO_Init(GPIOA,&GPIO_InitStructure);

  65.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//AD
  66.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
  67.         GPIO_Init(GPIOC,&GPIO_InitStructure);
  68. }

  69. void NVIC_Configuration(void)
  70. {
  71.            NVIC_InitTypeDef NVIC_InitStructure;

  72.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  73.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  74.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  75.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  76.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  77.         NVIC_Init(&NVIC_InitStructure);
  78.         
  79.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
  80.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  81.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  82.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  83.         NVIC_Init(&NVIC_InitStructure);
  84. }

  85. void USART_Configuration(void)
  86. {
  87.     USART_InitTypeDef  USART_InitStructure;

  88.         USART_InitStructure.USART_BaudRate=9600;
  89.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  90.         USART_InitStructure.USART_StopBits=USART_StopBits_1;
  91.         USART_InitStructure.USART_Parity=USART_Parity_No;
  92.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  93.         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

  94.         USART_Init(USART1,&USART_InitStructure);
  95.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  96.         USART_Cmd(USART1,ENABLE);
  97.         USART_ClearFlag(USART1,USART_FLAG_TC);
  98. }

  99. void ADC_Configuration(void)
  100. {
  101.         ADC_InitTypeDef ADC_InitStructure;

  102.         ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
  103.         ADC_InitStructure.ADC_ScanConvMode=DISABLE;
  104.         ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//////////////////////////////
  105.         ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
  106.         ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
  107.         ADC_InitStructure.ADC_NbrOfChannel=1;

  108.         ADC_Init(ADC1,&ADC_InitStructure);

  109.         ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5);

  110.         ADC_DMACmd(ADC1,ENABLE);//重要
  111.         
  112.         ADC_Cmd(ADC1,ENABLE);


  113.         ADC_ResetCalibration(ADC1);
  114.         while(ADC_GetResetCalibrationStatus(ADC1));

  115.         ADC_StartCalibration(ADC1);
  116.         while(ADC_GetCalibrationStatus(ADC1));

  117.         ADC_SoftwareStartConvCmd(ADC1,ENABLE);

  118. }

  119. void DMA_Configuration(void)
  120. {
  121.         DMA_InitTypeDef DMA_InitStructure;

  122.         DMA_DeInit(DMA1_Channel1);        //通道一連接ADC1        

  123.         DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&ADC1->DR; //外設地址,源地址
  124.         DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADCData;                        //目標地址

  125.         DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;                        //外設作為數據的來源
  126.         DMA_InitStructure.DMA_BufferSize=50;                                                        //和數組大小一樣大

  127.         DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;        //ADC->DR地址是固定的         外設存儲地址不變
  128.         DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;                //數組地址遞增的                        內存的地址是遞增的

  129.         DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;        //外設的數據寬度 16位的
  130.         DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;                                //內存的數據寬度=外設的數據寬度

  131.         DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;                //工作模式:連續的,讓DMA不斷的采集
  132.         DMA_InitStructure.DMA_Priority=DMA_Priority_High;        //優先級:高
  133.         DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;                        //外設到內存



  134. …………限于本文篇幅 余下代碼請從51黑下載附件…………

復制代碼

完整代碼下載:
中斷方法DMA.7z (186.66 KB, 下載次數: 302)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:360024 發表于 2018-6-27 10:22 | 顯示全部樓層
感謝作者
回復

使用道具 舉報

ID:249942 發表于 2019-1-3 18:59 | 顯示全部樓層
DMA的中斷具體的工作是什么呢?或者說有什么工作是非要在DMA中斷里面執行的呢?還有一個問題就是DMA的中斷什么時候進入?
回復

使用道具 舉報

ID:605886 發表于 2019-8-31 19:04 | 顯示全部樓層
感謝分享,感謝作者,拿來學一學
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 日本 欧美 中文幕 | 性一交一乱一透一a级 | 国产精品久久久久久福利一牛影视 | 欧美一级片中文字幕 | 国产欧美一区二区精品忘忧草 | 国产精品99久久久久久动医院 | 国产农村妇女精品一二区 | 欧美日韩一区精品 | 国产欧美精品 | 成人中文字幕在线观看 | 一区二区三区 在线 | 久久国产精品久久久久久 | 亚洲一区在线日韩在线深爱 | 96久久久久久 | 天天影视综合 | 亚洲第一区国产精品 | 欧美日韩亚洲系列 | 欧美视频二区 | 亚洲精品免费在线观看 | 国产精品区一区二区三区 | 毛片片| 91一区二区三区在线观看 | 成人免费视频网站在线看 | 欧美一区二区三区在线视频 | 国产一区二区三区色淫影院 | 久久精品久久久久久 | 国产一区二区精品在线 | 久久狠狠 | 色婷婷亚洲国产女人的天堂 | 精品国产三级 | 国产精品18久久久久久久 | 91视频在线观看 | 久久久91精品国产一区二区三区 | 国产在线中文字幕 | av不卡一区 | 中文字幕av一区二区三区 | 91传媒在线观看 | 欧美日韩视频在线第一区 | 成年网站在线观看 | 久久久久一区二区 | 综合精品久久久 |