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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主


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 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: h视频在线看 | 91私密视频 | 激情三区 | 国产精品久久国产精品 | 欧美一区二区三区视频 | 一级a性色生活片久久毛片波多野 | 午夜精品一区二区三区在线观看 | 久久91av | 亚洲一区二区av | 欧美色欧美亚洲另类七区 | 成人在线观看免费 | 99视频在线| 综合色在线 | 日日夜夜精品视频 | 日本成人中文字幕 | 美女黄视频网站 | 毛片a| 自拍偷拍av | 51ⅴ精品国产91久久久久久 | 伊人伊人 | 精品国产乱码久久久久久中文 | 国产1区2区3区 | 久久久久久久久久久成人 | 亚洲综合视频 | 999久久久久久久久6666 | 在线视频日韩 | 午夜精品久久久久久久久久久久久 | 日本精品一区二区三区四区 | 亚洲精品久久久一区二区三区 | 欧美一区二区三区高清视频 | 九九久久久久久 | 亚洲综合成人网 | 国产精品精品3d动漫 | 国产美女视频 | 久久人人网 | 国产午夜精品久久久 | 色偷偷人人澡人人爽人人模 | 成人影院av| 免费在线观看一区二区 | 国产日韩一区二区三区 | 国产精品视频久久久久 |