- UART3Init();
- RS485_SendByte(0x00);
- Delay2(10);
- hh[0]=0x66;
-
- MYDMA_Config(DMA1_Channel3,(u32)&USART3->DR,(u32)hh,1);//DMA1通道3,外设为串口3,存储器为hh,长度1
- USART3->CR3=1<<6; //使能串口3的DMA接收
- MYDMA_Enable(DMA1_Channel3);//开始一次DMA传输!*/
- // MYDMA_Config(DMA1_Channel2,(u32)&USART3->DR,(u32)SendBuf,1);//DMA1通道3,外设为串口3,存储器为hh,长度1
-
- while (1)
- {
- u8 res;
- Delay2(10);
- if(DMA1->ISR&(1<<9))
- {
- //LED0=1;//提示系统正在运行
- DMA1->IFCR|=1<<9;//清除通道3传输完成标志
- LCD_ShowByte(105,60+20,hh[0]);
- }}
复制代码- void UART3Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能外设时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
-
- USART_InitStructure.USART_BaudRate = 38400;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
- USART_Init(USART3, &USART_InitStructure);
- USART_Cmd(USART3, ENABLE);
- GPIO_ResetBits(GPIOB, GPIO_Pin_2);
- USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- /* UART2中断配置 */
- NVIC_InitStructure.NVIC_IRQChannel = 39;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//子优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);}
复制代码- void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
- {
- u32 DR_Base; //做缓冲用,不知道为什么.非要不可
- RCC->AHBENR|=1<<0;//开启DMA1时钟
- 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|=1<<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; //非存储器到存储器模式
- }
复制代码- void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
- {
- DMA_CHx->CCR&=~(1<<0); //关闭DMA传输
- DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量
- DMA_CHx->CCR|=1<<0; //开启DMA传输
- }
复制代码
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>