打印

基于STM32F407的串口1改成串口3,无反应,求助?

[复制链接]
325|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
哈金|  楼主 | 2018-7-6 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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]);         //Ïò´®¿Ú3·¢ËÍÊý¾Ý
    while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
   }
   printf("

");//²åÈë»»ÐÐ
   USART_RX_STA=0;
  }else
  {
   times++;
   if(times%5000==0)
   {
    printf("
ALIENTEK ̽Ë÷ÕßSTM32F407¿ª·¢°å ´®¿ÚʵÑé
");
    printf("ÕýµãÔ ×Ó@ALIENTEK


");
   }
   if(times%200==0)printf("ÇëÊäÈëÊý¾Ý,ÒԻسµ¼ü½áÊø
");  
   if(times%30==0)LED0=!LED0;//ÉÁ˸LED,ÌáʾϵͳÕýÔÚÔËÐÐ.
   delay_ms(10);   
  }
}
}

以上这些就是我修改过的文件,其它的没改过。之所以改到串口3,是因为我的电脑上只有COM3与COM4串口。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

432

主题

433

帖子

1

粉丝