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

標題: Proteus仿真stm32讀取ADC源程序 [打印本頁]

作者: 仰天大笑出門去    時間: 2019-5-12 13:43
標題: Proteus仿真stm32讀取ADC源程序
stm32課程的一個項目,用protues仿真stm32讀取ADC,做完之后把這些分享下來。


單片機源程序如下:
  1. //#include "main.h"
  2. #include "stm32f10x.h"
  3. #include "stm32f10x_it.h"
  4. #include <stdio.h>
  5. #define ADC1_DR_Address    ((uint32_t)0x40012400+0x4C)


  6. u8 seg_table[]={
  7. 0xc0,0xf9,0xa4,0xb0,
  8. 0x99,0x92,0x82,0xf8,
  9. 0x80,0x90,0x88,0x83,
  10. 0x39,0x5e,0x79,0x71};  //共陰極表

  11. uint16_t ADCConvertedValue;
  12. uint32_t DMA_ADC_OK;


  13. void NVIC_Config(void);
  14. void ADC_Config(void);
  15. void delay(void);
  16. void xdelay(void);
  17. void GPIO_Config(void);
  18. u16  Get_Adc(u8 ch);
  19. //u16 Get_Adc_Average(u8 ch,u8 times);



  20. int main(void)
  21. {
  22.    float temp=0;
  23. DMA_ADC_OK = 0;
  24. NVIC_Config();
  25. SysTick_Config(72000);
  26. ADC_Config();
  27. GPIO_Config();
  28.        
  29.           
  30.        
  31. while(1)
  32. {
  33.         int p,q;
  34.        
  35. //        GPIO_ResetBits(GPIOA,GPIO_Pin_8);
  36. //                GPIO_ResetBits(GPIOD,GPIO_Pin_2);
  37. //            delay();       
  38. //                GPIO_SetBits(GPIOA,GPIO_Pin_8);
  39. //                GPIO_SetBits(GPIOD,GPIO_Pin_2);
  40. //            delay();
  41.        
  42.         if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)!= RESET)
  43.   {
  44.                 DMA_ADC_OK = 1;
  45.     ADC_ClearFlag(ADC1, ADC_FLAG_EOC);   
  46.   }
  47.        
  48.         if(DMA_ADC_OK)
  49. {       
  50.         ADCConvertedValue=ADC_GetConversionValue(ADC1);
  51.         //ADCConvertedValue=Get_Adc(ADC_Channel_1);
  52.        
  53.   temp = (float)ADCConvertedValue* (3.3/4096);
  54.        
  55.        
  56.         if (temp>=1)
  57.         {
  58.                 temp=temp+1;
  59.                 //GPIO_WriteBit(GPIOA,GPIO_Pin_3,
  60.                //         (BitAction)((1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_3))));
  61.                
  62.                
  63.                 p=(int)temp;
  64.                 temp=(temp-p)*10;
  65.           q=(int)temp;
  66.        
  67.            GPIOB->ODR=0xfa;   // 高位
  68.            GPIOC->ODR=seg_table[p];
  69.            xdelay();
  70.        
  71.            GPIOB->ODR=0xfd;   // 低位
  72.            GPIOC->ODR=seg_table[q];
  73.            xdelay();
  74.         }
  75.         else {
  76.            temp=temp*10;
  77.            q=(int)temp;
  78.                
  79.                  GPIOB->ODR=0xfa;   // 高位
  80.            GPIOC->ODR=0xc0;
  81.                  xdelay();
  82.                
  83.                  GPIOB->ODR=0xfd;   // 低位
  84.            GPIOC->ODR=seg_table[q+1];
  85.                  xdelay();
  86.                
  87.                
  88.        
  89.        
  90.         }
  91.        
  92.        
  93.        
  94.        

  95.    
  96. }
  97. }       
  98. }
  99. /*NVIC??*/        
  100. void NVIC_Config(void)
  101. {
  102. NVIC_InitTypeDef NVIC_InitStructure;
  103. /* DMA??NVIC?? */
  104. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  105. NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
  106. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  107. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  108. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  109. NVIC_Init(&NVIC_InitStructure);
  110. }

  111. void ADC_Config(void)
  112. {
  113. GPIO_InitTypeDef GPIO_InitStructure;
  114. ADC_InitTypeDef ADC_InitStructure;
  115. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);//PC4
  116.        
  117.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);
  118.        
  119. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  120. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  121. GPIO_Init(GPIOA, &GPIO_InitStructure);
  122.        
  123.         ADC_DeInit(ADC1);
  124.        
  125. ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  126. ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  127. ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  128. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  129. ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  130. ADC_InitStructure.ADC_NbrOfChannel = 1;
  131. ADC_Init(ADC1, &ADC_InitStructure);
  132.        
  133.         ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
  134.        
  135.        
  136.         ADC_Cmd(ADC1, ENABLE);        //使能指定的ADC1
  137.         ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
  138.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);       
  139. }

  140. void delay(void)       
  141. {
  142.         int i=0xffa;
  143.         while(i--);
  144. }

  145. void xdelay(void)       
  146. {
  147.         int i=0xfff;
  148.         while(i--);
  149. }
  150. void GPIO_Config(void)
  151. {
  152.         GPIO_InitTypeDef GPIO_InitStructure;
  153.                 /* GPIOD Periph clock enable */
  154.       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
  155.             RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//PC4
  156.        
  157.        
  158.       /* Configure PD2 in output pushpull mode */
  159. //      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  160. //      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  161. //      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  162. //      GPIO_Init(GPIOA, &GPIO_InitStructure);//PD2????,?????
  163.        
  164.             GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  165.       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  166.       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  167.       GPIO_Init(GPIOA, &GPIO_InitStructure);//PD2????,?????
  168.           
  169.        
  170.       /* Configure PD2 in output pushpull mode */
  171.       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  172.       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  173.       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  174.       GPIO_Init(GPIOC, &GPIO_InitStructure);//PD2????,?????
  175. //   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//PC4
  176. //      /* Configure PD2 in output pushpull mode */
  177.       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  178.       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  179.       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  180.       GPIO_Init(GPIOB, &GPIO_InitStructure);//PD2????,?????
  181. //       
  182.           
  183.        
  184.        
  185. //                /* Configure PA8 in output pushpull mode */
  186. //      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  187. //      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  188. //      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  189. //      GPIO_Init(GPIOC, &GPIO_InitStructure);//PD2????,?????
  190. }       

  191. void xianshi(float x)
  192. {        GPIO_InitTypeDef GPIO_InitStructure; //定義一個管腳初始化的結構體
  193.          //開啟PA口時鐘
  194.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  195.          //配置PA所有的模式
  196.          GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
  197.          GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  198.          GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  199.          GPIO_Init(GPIOA,&GPIO_InitStructure);
  200.        
  201.        
  202.        


  203. }



  204. void ADC1_2_IRQHandler(void)
  205. {
  206.   if(ADC_GetITStatus(ADC1, ADC_IT_EOC)!= RESET)
  207.   {
  208.                 DMA_ADC_OK=1;
  209.     ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);   
  210.   }  
  211. }
復制代碼

所有資料51hei提供下載:
keil.zip (325.06 KB, 下載次數: 358)
proteus.zip (188.01 KB, 下載次數: 356)



作者: aaronxx    時間: 2019-5-26 15:00
學習
作者: LuminousRascal    時間: 2020-6-16 13:09
有沒有HEX文件啊
作者: gemini12    時間: 2020-6-16 21:06
謝謝樓主,雪中送碳啊,樓主天使
作者: heiyues    時間: 2020-6-16 21:07
感謝樓主大恩大德!
作者: 15130498112    時間: 2020-6-16 22:00
Proteus下下來打不開
作者: lhf58    時間: 2020-6-18 15:52

謝謝樓主,雪中送碳啊,樓主天使
作者: cookidog    時間: 2020-10-15 20:26
這個dma只是個變量?
作者: cookidog    時間: 2020-10-15 20:31
這個好像沒有dma啊
作者: trenlyn    時間: 2020-10-16 09:51
這個不錯的,可惜Proteus不支持STM8S仿真。
作者: zou1904    時間: 2021-6-16 15:41
為啥我開adc就卡死

作者: jyoi    時間: 2021-9-5 11:18
實測有效,但是ad采樣精度有點問題
作者: a53135324    時間: 2021-9-14 09:37
感謝樓主分享,正需要一個ADC采集的
作者: Hjc12345678    時間: 2022-2-18 00:00
本帖最后由 Hjc12345678 于 2022-2-18 00:14 編輯

沒有用到DMA,程序問題較多,如xiangshi()沒用到,p,q取用也有問題,不用DMA的話仿真數碼管顯示會閃爍,原因是轉換需要時間太長導致。
作者: easyming    時間: 2022-7-1 17:43
到底有用木有用,有仿真驗證過的嗎?

作者: 2932735693    時間: 2024-2-12 21:21
我用了移植的時候一切正常,但是我發現ADC只在開機時測量一次




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲激情在线观看 | 欧美日韩视频一区二区 | 一级二级三级黄色 | 午夜精品福利视频 | 日本国产高清 | 国产成人精品免费视频 | 99re在线 | 久在线| 国产一区二区三区 | 成年免费大片黄在线观看一级 | 欧美日韩视频在线 | 97精品超碰一区二区三区 | 亚洲国产福利视频 | 国产婷婷色一区二区三区 | 精品91久久久 | 国产精品小视频在线观看 | 精品国产一区久久 | 欧美精品一二三区 | 先锋资源网站 | 国产一区 在线视频 | 日韩福利在线观看 | 色av一区二区 | 精品无码久久久久国产 | 精品日韩一区 | 婷婷色国产偷v国产偷v小说 | 欧美一级在线 | 亚洲人成人一区二区在线观看 | 91视视频在线观看入口直接观看 | 日韩欧美中文字幕在线观看 | 久久久噜噜噜久久中文字幕色伊伊 | 久久精品视频一区二区 | 色眯眯视频在线观看 | 成人精品| 美女爽到呻吟久久久久 | 国产一区二区三区www | 日韩中出| 激情六月丁香婷婷 | 精品国产第一区二区三区 | 伊人狠狠 | 欧美色性 | 狠狠色综合网站久久久久久久 |