[英]How to Read and Show ADC value of STM32F4 using HAL Library
我有一個由 STMCubeMX 生成的代碼,我在其中使用門戶 PA0,如 ADC 輸入。 我正在嘗試使用 C 中的 STM 的 HAL 庫讀取此輸入,並使用 CDC 將值傳輸到 USB 端口。 查看主要內容,我嘗試在其中獲取數據並顯示以下內容:
#include "main.h"
#include "usb_device.h"
#include "usbd_cdc_if.h"
ADC_HandleTypeDef hadc1;
void SystemClock_Config(void);
static void MX_ADC1_Init(void);
int main(void)
{
uint8_t buffer[8];
HAL_Init();
SystemClock_Config();
MX_USB_DEVICE_Init();
MX_ADC1_Init();
HAL_ADC_Start(&hadc1);
while (1)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
HAL_ADC_PollForConversion(&hadc1, 1000);
sprintf((char*)buffer,"%d\n",(int)HAL_ADC_GetValue(&hadc1));
//HAL_Delay(500);
CDC_Transmit_FS(buffer,8);
}
}
調試代碼我看到 function "HAL_ADC_PollForConversion(&hadc1, 1000)" 永遠不會返回 "HAL_OK"。 在終端中,會出現一個值。
更新
好吧,為了代碼有效,我必須將 ADC 的“開始”放在無限循環中,並在循環的最后一個調用“停止”。 Ps:Adc運行在連續轉換模式。
int main(void)
{
uint8_t buffer[8];
HAL_Init();
SystemClock_Config();
MX_USB_DEVICE_Init();
MX_ADC1_Init();
while (1)
{
HAL_ADC_Start(&hadc1);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
HAL_ADC_PollForConversion(&hadc1, 1000);
sprintf((char*)buffer,"%d\n",(int)HAL_ADC_GetValue(&hadc1));
//HAL_Delay(500);
CDC_Transmit_FS(buffer,8);
HAL_ADC_Stop(&hadc1);
}
}
作為評論中答案的補充:
調用HAL_ADC_PollForConversion(&hadc1, 1000);
顯式停止轉換,即使激活了連續轉換。
如果您希望/必須等待每次轉換完成,則必須使用HAL_ADC_Start(&hadc1);
在等待(和閱讀)結果之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.