软件触发:STM32 HAL库 软件触发ADC 多通道连续转换_随风飘零翼的博客-CSDN博客
配置如图
注意采样周期不要过小,不然频繁中断会导致在RTOS中卡死
#define ADC_CHANNEL 3 //通道数
struct ADC1_x
{
__IO uint16_t ch2,
ch3,ch6;
};
union _ADC1
{
struct ADC1_x adc1_x;
__IO uint16_t all[ADC_CHANNEL];
};
union _ADC1 _adc1;
void Sensor_Task( void *pvParameters )
{
//adc1内部校准
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)_adc1.all, ADC_CHANNEL);
for( ;; )
{
ADC_Conversion();
osDelay(200);
uxHighWaterMark_Sensor = uxTaskGetStackHighWaterMark( NULL );
}
}
写了部分关键代码,在两个任务中OLED和串口打印分别显示的通道值。
后来发现使用的杜邦线接触不良,固定好之后,接到3.3V的值稳定在4095
我不怎么经常使用串口输出看log,一般是debug。在我调试rtos时候,常使用一个串口被多个任务使用,发送数据,没有加入接收功能。当加入adc+dma之后,系统运行一会便会卡死。在删除一个任务的串口打印任务后才恢复正常,我对一个任务使用了挂起任务调度器函数,然后在发送,再恢复,没有死机。
换了个方法,使用互斥信号量,将两个任务中的打印功能上锁和释放,也不会死机。文章来源:https://www.toymoban.com/news/detail-630460.html
一般情况下我不会对一个串口在多个任务下发送不同内容,串口顶多用来和别的设备通信。希望有经验的人给个建议。文章来源地址https://www.toymoban.com/news/detail-630460.html
到了这里,关于STM32 HAL库 ADC+DMA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!