DMA接收100个数据

2019-07-21 07:55发布

  DMA接收100个数据,绿灯就会翻转一次,同时收到的数据会返回给串口。
  注意:下完程序后,关机一次再验证,我用的是战舰103的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
heixinhai
1楼-- · 2019-07-21 13:06
为何没人评论呢,难道是我做的不好?
2楼-- · 2019-07-21 14:31
 精彩回答 2  元偷偷看……
3楼-- · 2019-07-21 17:02
回复【3楼】空:
---------------------------------
void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar)
{
u32 DR_Base;
RCC->AHBENR|=1<<0; //????DMA1?±??
delay_ms(5); //????DMA?±?????¨
DR_Base=cpar;
DMA_CHx->CPAR=DR_Base;    //DMA1 ???è???· 
// DMA_CHx->CMAR=(u32)cmar;  //DMA1,?????÷???·
// DMA1_MEM_LEN=cndtr;       //±???DMA??????????
// DMA_CHx->CNDTR=cndtr;     //DMA1,??????????
DMA_CHx->CCR=0X00000000; //????
DMA_CHx->CCR|=0<<4;   //?????è??//
DMA_CHx->CCR|=0<<5;   //?????????·??×÷//
DMA_CHx->CCR|=0<<6;  //???è???··?????????
DMA_CHx->CCR|=1<<7;    //?????÷????????
DMA_CHx->CCR|=0<<8;    //???è?????í????8??
DMA_CHx->CCR|=0<<10;  //?????÷?????í??8??
DMA_CHx->CCR|=1<<12;      //??????????//
DMA_CHx->CCR|=0<<14;  //·??????÷???????÷????
DMA_CHx->CCR |= 1<<1;                         //???í???????? 
MY_NVIC_Init(2,2,DMA1_Channel5_IRQChannel,2);//×é2??×???????????

void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx,u32 cmar,u16 cndtr)
{
DMA_CHx->CCR&=~(1<<0);       //??±?DMA???? 
DMA1_Channel6->CPAR=(u32)&USART2->DR;     //DMA1 ???è???· 
DMA1_Channel6->CMAR=(u32)cmar;     //DMA1,?????÷???·
DMA1_MEM_LEN=cndtr;       //±???DMA??????????
DMA_CHx->CNDTR=DMA1_MEM_LEN;     //DMA1,??????????
DMA_CHx->CCR|=1<<0;          //????DMA????
}   
void DMA1_Channel6_IRQHandler(void)
{
 FlagofDmaTest = TRUE;
}
4楼-- · 2019-07-21 19:12
volatile bool FlagofDmaTest;
u8 DmaTest[144];

int main(void)
{
Stm32_Clock_Init(9);      //?????±???è??
uart_init(72,100000);      //????????????115200  
uart2_init(72,100000);
delay_init(72);           //???±??????
LED_N_KEY_Init();      //????????LED??????????????
delay_ms(200);
  Encoder_Init2();          //?¨?±?÷3????±à???÷
  WM_Init_50hz_tim2(9999,143);//?¨?±?÷2?ú?ú2?·PWM   50HZ
PWM_Init(7199,0);            //?¨?±?÷4?ú?ú2?·PWM   10kh

delay_ms(10);
  JTAG_Set(JTAG_SWD_DISABLE);
  JTAG_Set(SWD_ENABLE);
CAN_Mode_Init(1,2,3,6,0);  //CAN??????,?¨????1000Kbps    
  Timer1_Init(49,7199);      //5MS??????????·???????
OLED_Init();
MYDMA_Config(DMA1_Channel6,(u32)&USART2->DR);
FlagofDmaTest = FALSE;

while(1)

USART2->CR3|=1<<6; //????????
FlagofDmaTest = FALSE;
MYDMA_Enable(DMA1_Channel6,(u8)DmaTest,144);
while(FlagofDmaTest == FALSE);
龙之谷
5楼-- · 2019-07-21 19:36
回复【2楼】heixinhai:
---------------------------------
功能相对单一,且偏冷门(DMA),所以可能需要的人少,再加上伸手党,评论就少了

有时间回去验证一下,个人对DMA有些抵触,感觉陌生,希望通过楼主程序学习一下,谢谢分享

当然了,顶一下是必须的
yuzeyuan1
6楼-- · 2019-07-21 19:43
mark<>

一周热门 更多>