专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
定时器捕获触发DMA传输io口的数据到定义的数组
2019-08-16 22:31
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
8569
9
1678
1,想通过定时器捕获一个上升沿后触发DMA将IO口(pc0~7)的数据存入一个数组中,看过原子哥以前写的一个程序,但是移植后并没有实现该功能,现在一直在调。希望原子哥和网友们给点建议。
现在的现象是:1.debug调试,配置都是OK的但是就是没有进行传输,试过m2m,和外设到内存都没用,求原子大哥和广大网友相助。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
lemonlin
2019-08-17 05:41
jokeym 发表于 2017-7-17 10:51
贴码、不知道你怎么配的
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //ê1ÄüDMA′«êä
DMA_DeInit(DMA_CHx); //½«DMAμÄí¨μà1¼Ä′æÆ÷ÖØéèÎaè±ê¡Öμ
DMA1_MEM_LEN=cndtr;
DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMAíaéè»ùμØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMAÄú′æ»ùμØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //êy¾Y′«êä·½Ïò£¬′óíaéè¶áè¡·¢Ëíμ½Äú′æ
DMA_InitStructure.DMA_BufferSize = cndtr; //DMAí¨μàμÄDMA»o′æμÄ′óD¡
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμØÖ·¼Ä′æÆ÷2»±ä
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //Äú′æμØÖ·¼Ä′æÆ÷μYÔö
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //êy¾Y¿í¶èÎa8λ
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Word; //êy¾Y¿í¶èÎa8λ
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //1¤×÷ÔúÕy3£Ä£ê½
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMAí¨μà xóμóDÖDóÅÏ輶
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; //DMAí¨μàxûóDéèÖÃÎaÄú′æμ½Äú′æ′«êä
DMA_Init(DMA_CHx, &DMA_InitStructure); //¸
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; //ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //ÇàÕ¼óÅÏ輶0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×óóÅÏ輶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äüía2¿ÖD¶Ïí¨μà
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
}
//¿aÆôò»′ÎDMA′«êä
void DMA1_Channel4_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_IT_TC2))
{
HREF_Cnt++;
if(HREF_Cnt!=59)
{
MYDMA_Enable(DMA1_Channel4);
}
DMA_ClearITPendingBit(DMA1_IT_GL4); //
LED1=!LED1;
}
}
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_Cmd(DMA_CHx, DISABLE ); //1رÕTIM4 êäèë2¶»ñ2 DMA1 ËùÖ¸ê¾μÄí¨μà
DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);//DMAí¨μàμÄDMA»o′æμÄ′óD¡
DMA_Cmd(DMA_CHx, ENABLE); //ê1ÄüTIM4 êäèë2¶»ñ2 ËùÖ¸ê¾μÄí¨μà
}
MYDMA_Config(DMA1_Channel4,(u32)&GPIOC->IDR,(u32)OV7620_BUF[HREF_Cnt],1);
加载中...
查看其它9个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //ê1ÄüDMA′«êä
DMA_DeInit(DMA_CHx); //½«DMAμÄí¨μà1¼Ä′æÆ÷ÖØéèÎaè±ê¡Öμ
DMA1_MEM_LEN=cndtr;
DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMAíaéè»ùμØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMAÄú′æ»ùμØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //êy¾Y′«êä·½Ïò£¬′óíaéè¶áè¡·¢Ëíμ½Äú′æ
DMA_InitStructure.DMA_BufferSize = cndtr; //DMAí¨μàμÄDMA»o′æμÄ′óD¡
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμØÖ·¼Ä′æÆ÷2»±ä
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //Äú′æμØÖ·¼Ä′æÆ÷μYÔö
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //êy¾Y¿í¶èÎa8λ
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Word; //êy¾Y¿í¶èÎa8λ
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //1¤×÷ÔúÕy3£Ä£ê½
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMAí¨μà xóμóDÖDóÅÏ輶
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; //DMAí¨μàxûóDéèÖÃÎaÄú′æμ½Äú′æ′«êä
DMA_Init(DMA_CHx, &DMA_InitStructure); //¸
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; //ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //ÇàÕ¼óÅÏ輶0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×óóÅÏ輶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äüía2¿ÖD¶Ïí¨μà
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
}
//¿aÆôò»′ÎDMA′«êä
void DMA1_Channel4_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_IT_TC2))
{
HREF_Cnt++;
if(HREF_Cnt!=59)
{
MYDMA_Enable(DMA1_Channel4);
}
DMA_ClearITPendingBit(DMA1_IT_GL4); //
LED1=!LED1;
}
}
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_Cmd(DMA_CHx, DISABLE ); //1رÕTIM4 êäèë2¶»ñ2 DMA1 ËùÖ¸ê¾μÄí¨μà
DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);//DMAí¨μàμÄDMA»o′æμÄ′óD¡
DMA_Cmd(DMA_CHx, ENABLE); //ê1ÄüTIM4 êäèë2¶»ñ2 ËùÖ¸ê¾μÄí¨μà
}
MYDMA_Config(DMA1_Channel4,(u32)&GPIOC->IDR,(u32)OV7620_BUF[HREF_Cnt],1);
一周热门 更多>