初级会员

- 积分
- 72
- 金钱
- 72
- 注册时间
- 2016-4-2
- 在线时间
- 17 小时
|

楼主 |
发表于 2016-4-8 09:36:06
|
显示全部楼层
上代码
ADC1设定(开启7个通道)
[mw_shl_code=applescript,true]ADC_DeInit(ADC1); //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 7; //顺序进行规则转换的ADC通道的数目[/mw_shl_code]
DMA设定:
[mw_shl_code=applescript,true]DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR));//DMA外设地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)存储器地址;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//存储器到外设模式
DMA_InitStructure.DMA_BufferSize = 7;//数据传输量
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设非增量模式
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器增量模式
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据长度:16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器数据长度:16位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// 使用普通模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//中等优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;[/mw_shl_code]
首先上面的代码是能正常工作的。我是借由上面的例子,产生了1楼这样的疑问
如果CH1 AD转换完成发出DMA请求,DMA控制器就开始按设定的搬运7次(而不是只搬运1次)的话,那
CH2 AD转换完成也发出DMA请求,DMA控制器怎么办?这样的工作应该不合理阿
》DMA_InitStructure.DMA_BufferSize = 7;//数据传输量
我认为是
CH1 AD 转换完成发出DMA请求,DMA控制器搬运1次(COUNT减1)
CH2 AD 转换完成发出DMA请求,DMA控制器搬运1次(COUNT减1)
.....
CH7 AD 转换完成发出DMA请求,DMA控制器搬运1次(COUNT减1,此时COUNT为0了) |
|