新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2015-3-3
- 在线时间
- 4 小时
|
4金钱
从图中看的话,好像不可以?
我以前用飞思卡尔的KL系列,使用DMA读取摄像头数据,这是在KL系列使用时写的DMA初始化程序:
void dma_init_data()
{
//输入端口配置
GPIO_QuickInit(HW_GPIOC,0,kGPIO_Mode_IPU);
GPIO_QuickInit(HW_GPIOC,1,kGPIO_Mode_IPU);
GPIO_QuickInit(HW_GPIOC,2,kGPIO_Mode_IPU);
GPIO_QuickInit(HW_GPIOC,3,kGPIO_Mode_IPU);
GPIO_QuickInit(HW_GPIOC,4,kGPIO_Mode_IPU);
GPIO_QuickInit(HW_GPIOC,5,kGPIO_Mode_IPU);
GPIO_QuickInit(HW_GPIOC,6,kGPIO_Mode_IPU);
GPIO_QuickInit(HW_GPIOC,7,kGPIO_Mode_IPU);
//DMA触发源设置,A13脚为触发信号
GPIO_QuickInit(HW_GPIOA, 13, kGPIO_Mode_IPU);//GPIO 初始化
GPIO_ITDMAConfig(HW_GPIOA,13,kGPIO_DMA_FallingEdge,true);//GPIO引脚的触发类型与DMA功能
DMA_InitTypeDef DMA_Init_eye={0};
DMA_Init_eye.chl = HW_DMA_CH0;
DMA_Init_eye.chlTriggerSource = PORTA_DMAREQ;
DMA_Init_eye.triggerSourceMode = kDMA_TriggerSource_Normal;//正常模式触发
DMA_Init_eye.transferByteCnt =eye_column;//读取字节数
DMA_Init_eye.sMod = kDMA_ModuloDisable;
DMA_Init_eye.sAddrIsInc = false;//true;//false
DMA_Init_eye.sDataWidth = kDMA_DataWidthBit_8;
DMA_Init_eye.sAddr = (uint32_t)&GPIO_InstanceTable[HW_GPIOC]->PDIR;
DMA_Init_eye.dMod = kDMA_ModuloDisable;
DMA_Init_eye.dAddrIsInc = true;//
DMA_Init_eye.dDataWidth = kDMA_DataWidthBit_8;//单次传递字节数
DMA_Init_eye.dAddr = (uint32_t)eye_value[eye_row-1][0];
DMA_Init(&DMA_Init_eye);
DMA_DisableRequest(HW_DMA_CH0);
// DMA_ITConfig(HW_DMA_CH0, kDMA_IT_Major, true);
// DMA_EnableRequest(HW_DMA_CH0);
}
但是再看STM32时,以上的思路行不通。。。。。。。
另外使用KL46时,也利用DMA的外部触发功能来测速,效果不错,而且感觉会比较节省CPU,需要的同学可以找我要哈~~
哦。。对。。。差点忘了自己的问题,请问STM32F103可以使用DMA功能来读取引脚数据并保存到一个数组吗?(比如说读取数字摄像头数据)??如果不能的话麻烦告诉我一下~如果可以请帮忙讲解一下,谢谢各位大神啦~~~
|
|