STM32的ADC连续转换模式是怎么回事?
STM32的ADC连续转换模式是怎么回事?就是具体转换过程是什么? 这年头真是奇怪啊,又是有人看没人回 回一个。 回一个, 但帮不上忙 这年头真是奇怪啊,很多人都不愿意看手册。 连续转换,就是像疯了一样的不停的转换。 我好像就这样用的,连续采集到一个变量里面,然后定时把这个变量赋值给另外的变量,就相当于低速采集数据了,效果好像还可以. 就是这一次转换完成之后立即开始下一次转换,转换速度只由你的采样时间+转换时间决定。这是一种方式转换很快的,我的毕设就是这么悲剧的。心电图,TIM触发500Hz采样率,结果弄成连续转换模式了。悲剧了,将近1M的采样率,数据处理来不及,液晶显示也来不及,搞了几天都不行。最后白天检查硬件的时候东西没有,晚上在天子里看见一个ADC的例子,想起我的工作模式来,程序里面一改,马上好了,很不错的心电图显示,然后我就有了一种撞墙的冲动。
心电图制作的资料等我这段时间忙完就上传上来,先发几张图片上来给大伙瞧瞧,看看有兴趣的人多不,不多说了,看图:
http://cache.amobbs.com/bbs_upload782111/files_30/ourdev_561801.jpg
(原文件名:1.jpg)
http://cache.amobbs.com/bbs_upload782111/files_30/ourdev_561802.jpg
(原文件名:2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_30/ourdev_561803.jpg
(原文件名:5.jpg)
http://cache.amobbs.com/bbs_upload782111/files_30/ourdev_561804.jpg
(原文件名:6.jpg)
软件用的是TI的串口显示程序,实际效果跟液晶上面是以模一样的。 这个东西比较感兴趣,发个程序上来, banyai 发表于 2010-6-10 19:39
连续转换,就是像疯了一样的不停的转换。
(引用自6楼)
我倒希望像疯了一样转换,我的不动,启动一次转换一次。
STM32L431 设置为ADC连续转换,结果还是要手动停止才可以。
void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_8;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
每一次都要停止:
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,0x02); //等待转换完成
HAL_ADC_Stop(&hadc1); 如果不停止下次转换就没数据。
页:
[1]