我有一个由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);
}
}
调试代码时,我看到函数“ 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);
}
}
答案 0 :(得分:1)
作为评论中答案的补充:
即使激活了连续转换,对HAL_ADC_PollForConversion(&hadc1, 1000);
的调用也会明确停止转换。
如果您希望/必须等待每个转换完成,则必须在等待(并读取)结果后使用HAL_ADC_Start(&hadc1);
重新启动ADC。