OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1473|回复: 1

串口3 DMA打印乱码,共地了,大家看下代码配置有问题吗

[复制链接]

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2014-7-4
在线时间
237 小时
发表于 2015-12-8 11:56:19 | 显示全部楼层 |阅读模式
5金钱

[mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]串口3 DMA打印乱码,共地了,大家看下代码配置有问题吗 [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]
[mw_shl_code=c,true]#include "delay.h" #include "usart3.h" #include "stdarg.h" #include "stdio.h" #include "string.h" #include "stm32f10x_tim.h" #include "stm32f10x_dma.h" ////////////////////////////////////////////////////////////////////////////////// //±????ò???©?§?°??????????×÷???í???????????????ü???????? //ALIENTEK????STM32??·?°? //?®??2?????ú?? //??????×?@ALIENTEK //????????:www.openedv.com //????????:2013/2/22 //°?±???V1.0 //°??¨?ù??????°?±????? //Copyright(C) ?????????í??×????????????? 2009-2019 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //?®??·????????? __align(8) u8 USART3_TX_BUF[USART3_MAX_SEND_LEN]; //·???????,×??óUSART3_MAX_SEND_LEN×??? #ifdef USART3_RX_EN //?????????????? //?®???????????? u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; //????????,×??óUSART3_MAX_RECV_LEN??×???. //?¨??????????????2??×?·??®?????±???????ó??10ms?????¨????????????????????. //????2??×?·?????????????10ms,?ò????????1??????????.??????????10ms?????????? //????????,?ò±í???????????ê±?. //????????????×??? //[15]:0,??????????????;1,???????????ú????. //[14:0]:?????????????¤?? u16 USART3_RX_STA=0; void USART3_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//?????????? { res=USART_ReceiveData(USART3); if(USART3_RX_STA<USART3_MAX_RECV_LEN) //?????????????? { TIM_SetCounter(TIM3,0);//?????÷???? //?????÷???? if(USART3_RX_STA==0)TIM3_Set(1); //?????¨?±?÷4?????? USART3_RX_BUF[USART3_RX_STA++]=res; //?????????????? }else { USART3_RX_STA|=1<<15; //????±ê???????ê?? } printf("%s",USART3_RX_BUF); //·??????®?? } } //??????IO ?®??3 //pclk1CLK1?±??????(Mhz) //bound:?¨???? void USART3_Init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOA?±?? RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); USART_DeInit(USART3); //?????®??3 //USART3_TX PB.10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //???????ì???? GPIO_Init(GPIOB, &GPIO_InitStructure); //USART3_RX PB.11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//???????? GPIO_Init(GPIOB, &GPIO_InitStructure); //?????? USART_InitStructure.USART_BaudRate = bound; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×??¤??8?????????? 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_Rx | USART_Mode_Tx; //??·????? USART_Init(USART3, &USART_InitStructure); //???????®??3 USART_DMACmd(USART3,USART_DMAReq_Tx,ENABLE); //?????®??3??DMA·??? USART3_DMA_Config(DMA1_Channel2,(u32)&USART3->DR,(u32)USART3_TX_BUF);//DMA1?¨??2,???è???®??3,?????÷??USART3_TX_BUF USART_Cmd(USART3, ENABLE); //?????®?? #ifdef USART3_RX_EN //?????????????? //???????????? USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//???????? NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//??????????3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×???????3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨?????? NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷ TIM3_Init(99,7199); //10ms???? USART3_RX_STA=0; //???? TIM3_Set(0); //??±??¨?±?÷4 #endif } //?®??3,printf ???? //?·±?????·?????????????USART3_MAX_SEND_LEN×??? void u3_printf(char* fmt,...) { va_list ap; va_start(ap,fmt); vsprintf((char*)USART3_TX_BUF,fmt,ap); va_end(ap); while(DMA1_Channel2->CNDTR!=0); //?????¨??2?????ê?? USART3_DMA_Enable(DMA1_Channel2,strlen((const char*)USART3_TX_BUF)); //?¨??dma·??????? } //?¨?±?÷3????·??????ò void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//???ü?????? { USART3_RX_STA|=1<<15; //±ê???????ê?? TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //????TIMx?ü??????±ê?? TIM3_Set(0); //??±?TIM3 } } //?è??TIM3?????? //sta:0????±?;1,????; void TIM3_Set(u8 sta) { if(sta) { TIM_SetCounter(TIM3,0);//?????÷???? TIM_Cmd(TIM3, ENABLE); //????TIMx }else TIM_Cmd(TIM3, DISABLE);//??±??¨?±?÷4 } //?¨???¨?±?÷?????????? //??????????????APB1??2±?????APB1??36M //arr??×?????×°???? //psc???±???¤·????? void TIM3_Init(u16 arr,u16 psc) { NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //?±??????//TIM3?±?????? //?¨?±?÷TIM3?????? TIM_TimeBaseStructure.TIM_Period = arr; //?è???????????ü??????×°????????×?????×°???????÷???????? TIM_TimeBaseStructure.TIM_Prescaler =psc; //?è??????×÷??TIMx?±?????????????¤·????? TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //?è???±??·???:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò?????????? TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //?ù?????¨????????????TIMx???±???ù?????? TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //???????¨??TIM3????,???í?ü?????? NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//??????????3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×???????3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨?????? NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷ } #endif ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //DMA1???÷?¨?????? //???????????????????¨??,???????ù?????????é???????? //???????÷->???è????/8???????í??/?????÷???????? //DMA_CHxMA?¨??CHx //cpar:???è???· //cmar:?????÷???· void USART3_DMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar) { DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //????DMA???? DMA_DeInit(DMA_CHx); //??DMA???¨??1?????÷???è???±???? DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMA???èADC?ù???· DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMA?????ù???· DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //????????·??ò????????????·????????è DMA_InitStructure.DMA_BufferSize = 0; //DMA?¨????DMA???????ó?? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //???è???·?????÷??±? DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //???????·?????÷???? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //?????í????8?? DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //?????í????8?? DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //?¤×÷?????????????? DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA?¨?? x???????????? DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA?¨??x?????è?????????????????? DMA_Init(DMA_CHx, &DMA_InitStructure); //?ù??DMA_InitStruct?????¨????????????DMA???¨??USART1_Tx_DMA_Channel?ù±ê?????????÷ } //????????DMA???? void USART3_DMA_Enable(DMA_Channel_TypeDef*DMA_CHx,u16 len) { DMA_Cmd(DMA_CHx, DISABLE ); //??±? ???????¨?? DMA_SetCurrDataCounter(DMA_CHx,len);//DMA?¨????DMA???????ó?? DMA_Cmd(DMA_CHx, ENABLE); //????DMA???? } [/mw_shl_code]


[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

找着原因了,是晶振焊成12M的了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2014-7-4
在线时间
237 小时
 楼主| 发表于 2015-12-8 11:56:20 | 显示全部楼层
找着原因了,是晶振焊成12M的了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-15 19:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表