| 
 
| ST32F407的串口实验,串口1下载在板子上没有问题,把串口1改成串口3,下载在板上,只有一个LED灯在闪,ATK XCOM 的串口助手里没有接收信息。 关于串口我有很多问题,现在最主要的两个问题是:
 1)如果PC没 COM2口,USART2就没能设置了吗?
 2)上面那个USART3的串口代码改?求大侠们帮我看看。我把板子的接串口,还是跳线帽插了?
 (先前在这个论坛里找到UASRT2的代码下载测过,没有成功,但是那代码被我改成UASRT1,是可以的。改成UASRT3就接收不了了。)
 
 我改到串口的文件一共有三件:1)usart.h   里面的USART1改为USART3
 2)usart.c    里面的USART1改为USART3 之外,还改了APH2改为APH1,原来的PA9,PA10也改为PB10,PB11
 3)main.c    里面的USART1改为USART3
 下面是贴的改到过的部分代码:
 
 #ifndef __USART_H
 #define __USART_H
 #include "stdio.h"
 #include "stm32f4xx_conf.h"
 #include "sys.h"
 
 
 [url=]
 
 //********************************************************************************
 
 //////////////////////////////////////////////////////////////////////////////////
 #define USART_REC_LEN     200   //
 #define EN_USART3_RX    1  //
 extern u8  USART_RX_BUF[USART_REC_LEN];
 extern u16 USART_RX_STA;
 
 void uart_init(u32 bound);
 #endif
 
 
 
 
 #include "sys.h"
 #include "usart.h"
 //////////////////////////////////////////////////////////////////////////////////
 
 #if SYSTEM_SUPPORT_OS
 #include "includes.h"
 #endif
 //////////////////////////////////////////////////////////////////////////////////
 
 
 
 [url=]
 
 //********************************************************************************
 
 //////////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////
 
 #if 1
 #pragma import(__use_no_semihosting)
 
 struct __FILE
 {
 int handle;
 };
 FILE __stdout;
 
 void _sys_exit(int x)
 {
 x = x;
 }
 
 int fputc(int ch, FILE *f)
 {
 while((USART3->SR&0X40)==0);//Ñ »··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
 USART3->DR = (u8) ch;
 return ch;
 }
 #endif
 
 #if EN_USART3_RX   //Èç¹ûʹÄÜÁ˽ÓÊÕ
 
 
 u8 USART_RX_BUF[USART_REC_LEN];     //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.
 //½ÓÊÕ״̬
 //bit15£¬ ½ÓÊÕÍê³É±êÖ¾
 //bit14£¬ ½ÓÊÕµ½0x0d
 //bit13~0£¬ ½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿
 u16 USART_RX_STA=0;       //½ÓÊÕ״̬±ê¼Ç
 //³õʼ»¯IO ´®¿Ú3
 //bound:²¨ÌØÂÊ
 void uart_init(u32 bound){
 //GPIO¶Ë¿ÚÉèÖÃ
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //ʹÄÜGPIOBʱÖÓ
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//ʹÄÜUSART3ʱÖÓ
 
 //´®¿Ú3¶ÔÓ¦Òý½Å¸´ÓÃÓ³Éä
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3); //GPIOB10¸´ÓÃΪUSART3
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3); //GPIOB11¸´ÓÃΪUSART3
 
 //USART3¶Ë¿ÚÅäÖÃ
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; //GPIOB10ÓëGPIOB11
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜ
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ËÙ¶È50MHz
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ÉÏÀ
 GPIO_Init(GPIOB,&GPIO_InitStructure); //³õʼ»&macrB10£&notB11
 //USART1 ³õʼ»¯ÉèÖÃ
 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); //³õʼ»¯´®¿Ú2
 
 USART_Cmd(USART3, ENABLE);  //ʹÄÜ´®¿Ú2
 
 //USART_ClearFlag(USART3, USART_FLAG_TC);
 
 #if EN_USART3_RX
 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿ªÆôÏà¹ØÖжÏ
 //Usart3 NVIC ÅäÖÃ
 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//´®¿Ú2ÖжÏͨµÀ
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇÀÕ¼ÓÅÏȼ¶3
 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;  //×ÓÓÅÏȼ¶3
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQͨµÀʹÄÜ
 NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷¡¢
 #endif
 
 }
 
 void USART3_IRQHandler(void)                 //´®¿Ú2ÖжϷþÎñ³ÌÐò
 {
 u8 Res;
 #if SYSTEM_SUPPORT_OS   //Èç¹ûSYSTEM_SUPPORT_OSÎªÕæ£¬ÔòÐèÒªÖ§³ÖOS.
 OSIntEnter();
 #endif
 if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ)
 {
 Res =USART_ReceiveData(USART3);//(USART3->DR); //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý
 
 if((USART_RX_STA&0x8000)==0)//½ÓÊÕδÍê³É
 {
 if(USART_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d
 {
 if(Res!=0x0a)USART_RX_STA=0;//½ÓÊÕ´íÎó,ÖØÐ¿ªÊ¼
 else USART_RX_STA|=0x8000; //½ÓÊÕÍê³ÉÁË
 }
 else //»¹Ã»ÊÕµ½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;//½ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ¼½ÓÊÕ
 }
 }
 }
 }
 #if SYSTEM_SUPPORT_OS  //Èç¹ûSYSTEM_SUPPORT_OSÎªÕæ£¬ÔòÐèÒªÖ§³ÖOS.
 OSIntExit();
 #endif
 }
 #endif
 
 /************************************************************************************************************/
 #include "sys.h"
 #include "delay.h"
 #include "usart.h"
 #include "led.h"
 #include "beep.h"
 #include "key.h"
 
 //ALIENTEK ̽Ë÷ÕßSTM32F407¿ª·¢°å ʵÑé4
 //´®¿ÚͨÐÅʵÑé -¿âº¯Êý°æ±¾
 //¼¼ÊõÖ§³Ö£ºwww.openedv.com
 //ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com
 //¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾
 //×÷ÕߣºÕýµãÔ ×Ó @ALIENTEK
 
 int main(void)
 {
 
 u8 t;
 u8 len;
 u16 times=0;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
 delay_init(168);  //ÑÓʱ³õʼ»¯
 uart_init(115200); //´®¿Ú³õʼ»¯²¨ÌØÂÊΪ115200
 LED_Init();      //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
 while(1)
 {
 if(USART_RX_STA&0x8000)
 {
 len=USART_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
 printf("
 Äú·¢Ë͵ÄÏûϢΪ:
 ");
 for(t=0;t<len;t++)
 {
 USART_SendData(USART3, USART_RX_BUF[t]);         //&Iuml;ò&acute;&reg;&iquest;&Uacute;3·&cent;&Euml;&Iacute;&Ecirc;&yacute;&frac34;&Yacute;
 while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//&micro;&Egrave;&acute;&yacute;·&cent;&Euml;&Iacute;&frac12;á&Ecirc;&oslash;
 }
 printf(&quot;
 
 &quot;);//&sup2;&aring;&Egrave;&euml;&raquo;&raquo;&ETH;&ETH;
 USART_RX_STA=0;
 }else
 {
 times++;
 if(times%5000==0)
 {
 printf(&quot;
 ALIENTEK &Igrave;&frac12;&Euml;÷&Otilde;&szlig;STM32F407&iquest;&ordf;·&cent;°&aring; &acute;&reg;&iquest;&Uacute;&Ecirc;&micro;&Ntilde;é
 &quot;);
 printf(&quot;&Otilde;&yacute;&micro;&atilde;&Ocirc; ×&Oacute;@ALIENTEK
 
 
 &quot;);
 }
 if(times%200==0)printf(&quot;&Ccedil;&euml;&Ecirc;&auml;&Egrave;&euml;&Ecirc;&yacute;&frac34;&Yacute;,&Ograve;&Ocirc;&raquo;&Oslash;&sup3;&micro;&frac14;ü&frac12;á&Ecirc;&oslash;
 &quot;);
 if(times%30==0)LED0=!LED0;//&Eacute;&Aacute;&Euml;&cedil;LED,&Igrave;á&Ecirc;&frac34;&Iuml;&micro;&Iacute;&sup3;&Otilde;&yacute;&Ocirc;&Uacute;&Ocirc;&Euml;&ETH;&ETH;.
 delay_ms(10);
 }
 }
 }
 
 以上这些就是我修改过的文件,其它的没改过。之所以改到串口3,是因为我的电脑上只有COM3与COM4串口。
 | 
 |