初级会员

- 积分
- 52
- 金钱
- 52
- 注册时间
- 2019-4-19
- 在线时间
- 8 小时
|
5金钱
串口2通过RS232转USB串口输出数据到串口调试助手,发现数据完全不对:
求助!!!!
- #include "sys.h"
- #include "usart.h"
- //////////////////////////////////////////////////////////////////////////////////
- //èç1ûê1óÃucos,Ôò°üà¨ÏÂÃæμÄí·Îļt¼′¿é.
- #if SYSTEM_SUPPORT_OS
- #include "includes.h" //ucos ê1óÃ
- #endif
- //////////////////////////////////////////////////////////////////////////////////
- //1,Ôö¼óá˶ÔUCOSIIμÄÖ§3Ö
- //////////////////////////////////////////////////////////////////////////////////
-
- //////////////////////////////////////////////////////////////////
- //¼óèëòÔÏÂ′úÂë,Ö§3Öprintfoˉêy,¶ø2»DèòaÑ¡Ôñuse MicroLIB
- #if 1
- #pragma import(__use_no_semihosting)
- //±ê×¼¿aDèòaμÄÖ§3Öoˉêy
- struct __FILE
- {
- int handle;
- };
- FILE __stdout;
- //¶¨òå_sys_exit()òÔ±üÃaê1óðëÖ÷»úÄ£ê½
- void _sys_exit(int x)
- {
- x = x;
- }
- //ÖØ¶¨òåfputcoˉêy
- int fputc(int ch, FILE *f)
- {
- while((USART2->SR&0X40)==0);//Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï
- USART2->DR = (u8) ch;
- return ch;
- }
- #endif
-
-
- #if EN_USART2_RX //èç1ûê1Äüá˽óêÕ
- //′®¿ú2ÖD¶Ï·tÎñ3ìDò
- //×¢òa,¶áè¡USARTx->SRÄü±üÃaÄaÃûÆäÃîμÄ′íÎó
- u8 USART_RX_BUF[USART_REC_LEN]; //½óêÕ»o3å,×î′óUSART_REC_LEN¸ö×Ö½ú.
- //½óêÕ×′ì¬
- //bit15£¬ ½óêÕíê3é±êÖ¾
- //bit14£¬ ½óêÕμ½0x0d
- //bit13~0£¬ ½óêÕμ½μÄóDD§×Ö½úêyÄ¿
- u16 USART_RX_STA=0; //½óêÕ×′쬱ê¼Ç
-
- void uart_init(u32 bound){
- //GPIO¶Ë¿úéèÖÃ
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //ê1ÄüUSART2
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ê1ÄüGPIOAê±Öó
- //USART2_TX GPIOA.2
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3ö
- GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIOA.2
-
- //USART2_RX GPIOA.33õê¼»ˉ
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
- GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIOA.3
- //Usart2 NVIC ÅäÖÃ
- NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//ÇàÕ¼óÅÏè¼¶3
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×óóÅÏè¼¶3
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μàê1Äü
- NVIC_Init(&NVIC_InitStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷
-
- //USART 3õê¼»ˉéèÖÃ
- USART_InitStructure.USART_BaudRate = bound;//′®¿ú2¨ìØÂê
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
- USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
- USART_InitStructure.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //êÕ·¢Ä£ê½
- USART_Init(USART2, &USART_InitStructure); //3õê¼»ˉ′®¿ú2
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//¿aÆô′®¿ú½óêüÖD¶Ï
- USART_Cmd(USART2, ENABLE); //ê1Äü′®¿ú2
- }
- void USART2_IRQHandler(void) //′®¿ú2ÖD¶Ï·tÎñ3ìDò
- {
- u8 Res;
- #if SYSTEM_SUPPORT_OS //èç1ûSYSTEM_SUPPORT_OSÎaÕæ£¬ÔòDèòaÖ§3ÖOS.
- OSIntEnter();
- #endif
- if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
- {
- Res =USART_ReceiveData(USART2); //¶á衽óêÕμ½μÄêy¾Y
-
- if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
- {
- if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
- {
- if(Res!=0x0a)USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
- else USART_RX_STA|=0x8000; //½óêÕíê3éáË
- }
- else //»1ûêÕμ½0X0D
- {
- if(Res==0x0d)USART_RX_STA|=0x4000;
- else
- {
- USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
- USART_RX_STA++;
- if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
- }
- }
- }
- }
- #if SYSTEM_SUPPORT_OS //èç1ûSYSTEM_SUPPORT_OSÎaÕæ£¬ÔòDèòaÖ§3ÖOS.
- OSIntExit();
- #endif
- }
- #endif
复制代码
|
|