关于串口的配置、、、

2019-07-21 00:41发布

最近想把407板子上所有的串口都用自己的程序写出来,方便调用,但是除了串口1成功之外,配置2、3都有问题,我是仿照串口1 的配置配置2、3的,,可是PC就是收不到板子发的数据,请教大神指正,网上找了一些资料,也没有说这些串口在配置时有什么特别的不同。。。
这是串口1的初始化配置。。成功了
void USART1_Init(u32 baund)
{
GPIO_InitTypeDef GPIO_InitStructure;                      //定义一个控制GPIO参数结构体变量
USART_InitTypeDef USART_InitStructure;  //定义一个控制USART参数结构体变量
NVIC_InitTypeDef NVIC_InitStructure;          //定义一个控制USART参数结构体变量

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);    //串口1时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);     //IO口时钟使能

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);   //将PA9|10复用置USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

  //******   IO口输出参数设置  ********//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //模式x选择为复用
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ;  //输出上拉
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;  //推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;    
  //******   IO口函数初始化  ********//
GPIO_Init(GPIOA,&GPIO_InitStructure);
       //******   USART1参数的设置  ********//
USART_InitStructure.USART_BaudRate = baund;                                    //设定串口发送的波特率
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                //发送或者接收模式
USART_InitStructure.USART_Parity =  USART_Parity_No;                           //奇偶校验位设置
USART_InitStructure.USART_StopBits = USART_StopBits_1;                         //停止位设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b;   //发送字节长度
 //******   串口函数初始化  ********//
USART_Init(USART1,&USART_InitStructure);   
USART_Cmd(USART1,ENABLE);                                       //串口函数使能   //******串口发送接收已经结束
 
 //******   串口中断参数配置  ********//
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //选择使用哪个串口中断
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                //串口通道使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;    //中断抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;         //中断响应优先级 
//******   串口中断函数初始化  ********//
NVIC_Init(&NVIC_InitStructure);

     //******   使能中断函数  ********// 
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);    
}

这是串口 三的配置,不成功。。就是改了一下口,其他的基本没动,但是就是不行。
void USART3_Init(u32 baund)
{
GPIO_InitTypeDef GPIO_InitStructure;                      //定义一个控制GPIO参数结构体变量
USART_InitTypeDef USART_InitStructure;  //定义一个控制USART参数结构体变量
NVIC_InitTypeDef NVIC_InitStructure;          //定义一个控制USART参数结构体变量
/*****  Enable GPIO Clock  *****/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);     //IO口时钟使能
/*****  Enable GPIO Clock  *****/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);   
/*****  Coneect USART pins to AF7  *****/
GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_USART3);   
GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_USART3);

  //******   IO口输出参数设置  ********//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ;  //输出上拉
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;  //推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;    
  //******   IO口函数初始化  ********//
GPIO_Init(GPIOC,&GPIO_InitStructure);
       //******   USART1参数的设置  ********//
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                //发送或者接收模式
USART_InitStructure.USART_Parity =  USART_Parity_No;                           //奇偶校验位设置
USART_InitStructure.USART_StopBits = USART_StopBits_1;                         //停止位设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b;   //发送字节长度
 //******   串口函数初始化  ********//
USART_Init(USART3,&USART_InitStructure);   
USART_Cmd(USART3,ENABLE);                                       //串口函数使能   //******串口发送接收已经结束
 
 //******   串口中断参数配置  ********//
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //选择使用哪个串口中断
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                //串口通道使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;    //中断抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;         //中断响应优先级 
//******   NVIC Configuuration  ********//
NVIC_Init(&NVIC_InitStructure);

     //******Enable the USARTx Interrupt********// 
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);    
}

有知道的吗?请教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
三支火把
1楼-- · 2019-07-21 05:08
求大神来看    啊
龙之谷
2楼-- · 2019-07-21 09:28
 精彩回答 2  元偷偷看……
三支火把
3楼-- · 2019-07-21 10:43
 精彩回答 2  元偷偷看……
八度空间
4楼-- · 2019-07-21 15:00
原子哥不是有其他串口在用的么,看看例程就是了
龙之谷
5楼-- · 2019-07-21 19:44
1.优先级要配置一下
2.考虑是不是引脚有其他用处,硬件电路导致
litaoweb
6楼-- · 2019-07-22 00:38
其他串口的例子在哪里下载

一周热门 更多>