OpenEdv-开源电子网

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

串口1接收数据问题

[复制链接]

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-1-1
在线时间
0 小时
发表于 2015-4-17 13:52:42 | 显示全部楼层 |阅读模式
5金钱
根据原子哥的例程改的,串口1初始化
[mw_shl_code=c,true]#include "delay.h" #include "usart1.h" #include "stdarg.h" #include "stdio.h" #include "string.h" //?®??·????????? __align(8) u8 USART1_TX_BUF[USART1_MAX_SEND_LEN]; //·???????,×??óUSART1_MAX_SEND_LEN×??? #ifdef USART1_RX_EN //?????????????? //?®???????????? u8 USART1_RX_BUF[USART1_MAX_RECV_LEN]; //????????,×??óUSART1_MAX_RECV_LEN??×???. //?¨??????????????2??×?·??®?????±???????ó??10ms?????¨????????????????????. //????2??×?·?????????????10ms,?ò????????1??????????.??????????10ms?????????? //????????,?ò±í???????????ê±?. //????????????×??? //[15]:0,??????????????;1,???????????ú????. //[14:0]:?????????????¤?? u16 USART1_RX_STA=0; void USART1_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//?????????? { res =USART_ReceiveData(USART1); if(USART1_RX_STA<USART1_MAX_RECV_LEN) //?????????????? { TIM_SetCounter(TIM4,0);//?????÷???? if(USART1_RX_STA==0)TIM4_Set(1); //?????¨?±?÷4?????? USART1_RX_BUF[USART1_RX_STA++]=res; //?????????????? }else { USART1_RX_STA|=1<<15; //????±ê???????ê?? } } } //??????IO ?®??1 //pclk1CLK1?±??????(Mhz) //bound:?¨???? void USART1_Init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOA?±?? RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); USART_DeInit(USART1); //?????®??1 //USART1_TX PA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //???????ì???? GPIO_Init(GPIOA, &GPIO_InitStructure); //??????PA9 //USART1_RX PA.10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//???????? GPIO_Init(GPIOA, &GPIO_InitStructure); //??????PA10 //PA.6?????? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PA.6 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //?¨?????ì???? GPIO_Init(GPIOA, &GPIO_InitStructure); //??????PA6 //PA.5?????? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PA.5 GPIO_Init(GPIOA, &GPIO_InitStructure); //??????PA5 USART_InitStructure.USART_BaudRate = bound;//??°??è????9600; 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(USART1, &USART_InitStructure); //???????®?? 1 //?¨?????è?? // USART2->BRR=(pclk1*1000000)/(bound);// ?¨?????è?? //USART2->CR1|=0X200C; //1??????,?????é??. USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //?????®??1??DMA·??? UART_DMA_Config(DMA1_Channel7,(u32)&USART1->DR,(u32)USART1_TX_BUF);//DMA1?¨??7,???è???®??1,?????÷??USART2_TX_BUF USART_Cmd(USART1, ENABLE); //?????®?? #ifdef USART1_RX_EN //?????????????? //???????????? USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//???????? NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//??????????3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×???????3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨?????? NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷ TIM4_Init(99,7199); //10ms???? USART1_RX_STA=0; //???? TIM4_Set(0); //??±??¨?±?÷4 #endif } //printf???????????ò???????????? //?®??1,printf ???? //?·±?????·?????????????USART1_MAX_SEND_LEN×??? void u1_printf(char* fmt,...) { va_list ap; va_start(ap,fmt); vsprintf((char*)USART1_TX_BUF,fmt,ap); va_end(ap); while(DMA_GetCurrDataCounter(DMA1_Channel7)!=0); //?????¨??7?????ê?? UART_DMA_Enable(DMA1_Channel7,strlen((const char*)USART1_TX_BUF)); //?¨??dma·??????? } //?¨?±?÷4????·??????ò void TIM4_IRQHandler(void) { if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)//???ü?????? { USART1_RX_STA|=1<<15; //±ê???????ê?? TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //????TIMx?ü??????±ê?? TIM4_Set(0); //??±?TIM4 } } //?è??TIM4?????? //sta:0????±?;1,????; void TIM4_Set(u8 sta) { if(sta) { TIM_SetCounter(TIM4,0);//?????÷???? TIM_Cmd(TIM4, ENABLE); //????TIMx }else TIM_Cmd(TIM4, DISABLE);//??±??¨?±?÷4 } //?¨???¨?±?÷?????????? //??????????????APB1??2±?????APB1??36M //arr??×?????×°???? //psc???±???¤·????? void TIM4_Init(u16 arr,u16 psc) { NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //?±??????//TIM4?±?????? //?¨?±?÷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(TIM4, &TIM_TimeBaseStructure); //?ù?????¨????????????TIMx???±???ù?????? TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //???????¨??TIM4????,???í?ü?????? NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//??????????3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×???????3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨?????? NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷ } ///////////////////////////////////////USART2 DMA·?????????·?////////////////////////////////// //DMA1???÷?¨?????? //???????????????????¨??,???????ù?????????é???????? //???????÷->???è????/8???????í??/?????÷???????? //DMA_CHxMA?¨??CHx //cpar:???è???· //cmar:?????÷???· void UART_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_Medium; //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 UART_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???? } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif [/mw_shl_code]
然后用
[mw_shl_code=c,true]for(t=0;t<len3r;t++) { USART_SendData(USART1, USART_RX_BUF[t]); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//????·????á?? } [/mw_shl_code]

给串口1发送信息总是发两次第二次才能收到,有没有人能帮看看

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-17 23:17:29 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-1-1
在线时间
0 小时
 楼主| 发表于 2015-4-18 13:33:03 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
/(ㄒoㄒ)/~~
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-1-1
在线时间
0 小时
 楼主| 发表于 2015-4-18 13:36:15 | 显示全部楼层
给串口3发就完全木有问题。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 11:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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