你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
用DMA传输ADC转换结果, 数据不正确
[复制链接]
cpev
提问时间:2018-3-15 09:39 /
阅读主题, 点击返回1楼
赞
0
收藏
0
评论
22
分享
发布时间:2018-3-15 09:39
请先
登录
后回复
22个回答
dsjsjf
回答时间:2018-3-15 15:38:18
a0a.1 32b0c
给你个程序参考
#define AdcChannelNum 1
#define AdcDmaLengh (AdcFilterNum * AdcChannelNum)
uint32_t ADC_ConvertedValue[AdcFilterNum][AdcChannelNum];
/* ADC1 init function */
static void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
/**Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
void Start_AdConvert(void)
{
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_Delay(100);
HAL_ADC_Start_DMA(&hadc1, (ADC_ConvertedValue[0]), AdcDmaLengh);
}
评分
参与人数
1
蝴蝶豆
+3
收起
理由
zero99
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
小涂邦邦
回答时间:2018-9-5 23:39:54
a0a.1 32b0c
我也遇到了同样的问题,就是DMA得到的结果只有低8位,没有高8位。例如,ADC采样的值位0x0A10,但DMA对应的内存变量值为0x0010。也就是高位传不过来。请问楼主是怎么解决的。
赞
0
评论
回复
支持
反对
OHWIXP
回答时间:2018-9-24 16:00:44
a0a.1 32b0c
本帖最后由 OHWIXP 于 2018-9-24 16:30 编辑
楼主程序里DMA传输数据宽度部分,应该是配置错了:
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //数据宽度为32位
DMA_InitStructure.DMA_MemoryDataSize =
DMA_PeripheralDataSize_Word
; //数据宽度为32位
——改为:
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_
MemoryDataSize
_HalfWord; //数据宽度为16位
赞
0
评论
回复
支持
反对
1
2
3
/ 3 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
#define AdcChannelNum 1
#define AdcDmaLengh (AdcFilterNum * AdcChannelNum)
uint32_t ADC_ConvertedValue[AdcFilterNum][AdcChannelNum];
/* ADC1 init function */
static void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
/**Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
void Start_AdConvert(void)
{
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_Delay(100);
HAL_ADC_Start_DMA(&hadc1, (ADC_ConvertedValue[0]), AdcDmaLengh);
}
评分
查看全部评分
楼主程序里DMA传输数据宽度部分,应该是配置错了:
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //数据宽度为32位
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Word; //数据宽度为32位
——改为:
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //数据宽度为16位