欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5750|回復: 7
收起左側

基于proteus的stm32的ADC采集電壓并用串口顯示問題

[復制鏈接]
ID:696129 發表于 2020-3-3 16:46 | 顯示全部樓層 |閱讀模式
我想用proteus仿真stm32的ADC功能(中斷),但是之前解決的串口問題又來了,什么也不顯示。之前還有一個問題是,顯示的時候只顯示整數,電壓值是分數的統統不顯示,百思不得其解,向各位大佬求助
單通道(中斷讀。.zip (402.67 KB, 下載次數: 104)

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp_usart.h"
  3. #include "bsp_adc.h"
  4. #include "bsp_rccclkconfig.h"


  5. extern __IO uint16_t ADC_ConvertedValue;

  6. // 局部變量,用于保存轉換計算后的電壓值         
  7. float ADC_ConvertedValueLocal;        

  8. // 軟件延時
  9. void Delay(__IO uint32_t nCount)
  10. {
  11.   for(; nCount != 0; nCount--);
  12. }

  13. /**
  14.   * @brief  主函數
  15.   * @param  無
  16.   * @retval 無
  17.   */
  18. int main(void)
  19. {        
  20.         //HSE_SetSysClk( RCC_PLLMul_9 );
  21.         HSI_SetSysClk( RCC_PLLMul_14 );
  22.         
  23.         MCO_GPIO_Config();
  24.         RCC_MCOConfig(RCC_MCO_SYSCLK);
  25.         // 配置串口
  26.         USART_Config();
  27.         
  28.         // ADC 初始化
  29.         ADCx_Init();
  30.         
  31.         printf("\r\n ----這是一個ADC單通道中斷讀取實驗----\r\n");
  32.         
  33.         while (1)
  34.         {
  35.                 ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3;
  36.         
  37.                 printf("\r\n The current AD value = 0x%04X \r\n",
  38.                        ADC_ConvertedValue);
  39.                 printf("\r\n The current AD value = %f V \r\n",
  40.                        ADC_ConvertedValueLocal);
  41.                 printf("\r\n\r\n");

  42.                 Delay(10000);  
  43.         }
  44. }
  45. /*********************************************END OF FILE**********************/
復制代碼

Snipaste_2020-03-03_16-44-43.png



回復

使用道具 舉報

ID:648760 發表于 2020-3-8 11:23 | 顯示全部樓層
有人說,proteus仿真STM32時鐘頻率太高的話容易失敗,我估計時鐘頻率的問題,我還從沒使用過HSI,沒細看你最后頻率是多少。另外沒看出你的程序中ADC_ConvertedValue的值怎么來的。
回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:648760 發表于 2020-3-8 11:32 | 顯示全部樓層
沒見怎樣得到轉換值的,沒函數,也沒見調用。
回復

使用道具 舉報

ID:696129 發表于 2020-3-8 11:52 | 顯示全部樓層
qinsir88 發表于 2020-3-8 11:23
有人說,proteus仿真STM32時鐘頻率太高的話容易失敗,我估計時鐘頻率的問題,我還從沒使用過HSI,沒細看你 ...

protues里用HSE總是輸出亂碼,時鐘頻率,波特率一樣也顯示不出來,使用HSI再把時鐘頻率調到56MHz及以下就能正常運行了,也不知道為什么。電壓采集是在中斷里面
  1. void ADC_IRQHandler(void)
  2. {        
  3.         if (ADC_GetITStatus(ADCx,ADC_IT_EOC)==SET)
  4.         {
  5.                 // 讀取ADC的轉換值
  6.                 ADC_ConvertedValue = ADC_GetConversionValue(ADCx);
  7.         }
  8.         ADC_ClearITPendingBit(ADCx,ADC_IT_EOC);
  9. }
復制代碼
以下是設置中斷的函數
  1. static void ADC_NVIC_Config(void)
  2. {
  3.   NVIC_InitTypeDef NVIC_InitStructure;
  4.         // 優先級分組
  5.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  6.   // 配置中斷優先級
  7.   NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQ;
  8.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  9.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  10.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  11.   NVIC_Init(&NVIC_InitStructure);
  12. }
復制代碼




回復

使用道具 舉報

ID:648760 發表于 2020-3-8 23:10 | 顯示全部樓層
我估計是proteus的支持問題,這方面例子很少,我弄過一個可以在原子開發板上跑的串口接收中斷的例子挪到proteus上,串口接收中斷不[看到運行,也不知道怎么回事。[你找個板子試試吧em06]
回復

使用道具 舉報

ID:760611 發表于 2020-5-25 13:19 | 顯示全部樓層
樓主解決了嗎,我的也是串口不顯示采集數據,感覺應該是printf的問題,我的一加上printf 串口就不顯示數據了
回復

使用道具 舉報

ID:512644 發表于 2020-7-28 10:35 | 顯示全部樓層
無蹤雪 發表于 2020-3-8 11:52
protues里用HSE總是輸出亂碼,時鐘頻率,波特率一樣也顯示不出來,使用HSI再把時鐘頻率調到56MHz及以下就 ...

仿真總是失敗,總是缺少debug文件,該如何解決
回復

使用道具 舉報

ID:440028 發表于 2021-12-30 14:51 | 顯示全部樓層
這個例程沒有問題,你可以在51黑里下載一個例程做對比,這樣才能找到問題
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表