標(biāo)題: 基于proteus的stm32的ADC采集電壓并用串口顯示問題 [打印本頁]

作者: 無蹤雪    時間: 2020-3-3 16:46
標(biāo)題: 基于proteus的stm32的ADC采集電壓并用串口顯示問題
我想用proteus仿真stm32的ADC功能(中斷),但是之前解決的串口問題又來了,什么也不顯示。之前還有一個問題是,顯示的時候只顯示整數(shù),電壓值是分?jǐn)?shù)的統(tǒng)統(tǒng)不顯示,百思不得其解,向各位大佬求助
單通道(中斷讀取).zip (402.67 KB, 下載次數(shù): 104)

單片機(jī)源程序如下:
  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. // 局部變量,用于保存轉(zhuǎn)換計算后的電壓值         
  7. float ADC_ConvertedValueLocal;        

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

  13. /**
  14.   * @brief  主函數(shù)
  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**********************/
復(fù)制代碼






作者: qinsir88    時間: 2020-3-8 11:23
有人說,proteus仿真STM32時鐘頻率太高的話容易失敗,我估計時鐘頻率的問題,我還從沒使用過HSI,沒細(xì)看你最后頻率是多少。另外沒看出你的程序中ADC_ConvertedValue的值怎么來的。
作者: qinsir88    時間: 2020-3-8 11:32
沒見怎樣得到轉(zhuǎn)換值的,沒函數(shù),也沒見調(diào)用。
作者: 無蹤雪    時間: 2020-3-8 11:52
qinsir88 發(fā)表于 2020-3-8 11:23
有人說,proteus仿真STM32時鐘頻率太高的話容易失敗,我估計時鐘頻率的問題,我還從沒使用過HSI,沒細(xì)看你 ...

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

  6.   // 配置中斷優(yōu)先級
  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. }
復(fù)制代碼





作者: qinsir88    時間: 2020-3-8 23:10
我估計是proteus的支持問題,這方面例子很少,我弄過一個可以在原子開發(fā)板上跑的串口接收中斷的例子挪到proteus上,串口接收中斷不[看到運(yùn)行,也不知道怎么回事。[你找個板子試試吧em06]
作者: qxrr    時間: 2020-5-25 13:19
樓主解決了嗎,我的也是串口不顯示采集數(shù)據(jù),感覺應(yīng)該是printf的問題,我的一加上printf 串口就不顯示數(shù)據(jù)了
作者: 1486000676    時間: 2020-7-28 10:35
無蹤雪 發(fā)表于 2020-3-8 11:52
protues里用HSE總是輸出亂碼,時鐘頻率,波特率一樣也顯示不出來,使用HSI再把時鐘頻率調(diào)到56MHz及以下就 ...

仿真總是失敗,總是缺少debug文件,該如何解決
作者: liuyiyi    時間: 2021-12-30 14:51
這個例程沒有問題,你可以在51黑里下載一個例程做對比,這樣才能找到問題




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1