OpenEdv-开源电子网

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

关于串口的配置、、、

[复制链接]

29

主题

91

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2015-4-24
在线时间
37 小时
发表于 2015-12-8 11:05:51 | 显示全部楼层 |阅读模式
5金钱
最近想把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);    
}

有知道的吗?请教

一起学,一起进步,未来总有你我的一片天空……
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

29

主题

91

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2015-4-24
在线时间
37 小时
 楼主| 发表于 2015-12-8 11:16:11 | 显示全部楼层
一起学,一起进步,未来总有你我的一片天空……
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-8 11:26:20 | 显示全部楼层
你确定串口3是PC10/PC11吗
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

29

主题

91

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2015-4-24
在线时间
37 小时
 楼主| 发表于 2015-12-8 12:41:21 | 显示全部楼层
回复【3楼】龙之谷:
---------------------------------
是的,,查了芯片手册,,可以复用到PC10|11的。。大神看出是其他的什么问题了吗?
一起学,一起进步,未来总有你我的一片天空……
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-12-8 13:06:49 | 显示全部楼层
原子哥不是有其他串口在用的么,看看例程就是了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-8 13:10:26 | 显示全部楼层
1.优先级要配置一下
2.考虑是不是引脚有其他用处,硬件电路导致
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-12-8
在线时间
0 小时
发表于 2015-12-8 14:00:51 | 显示全部楼层
其他串口的例子在哪里下载
回复

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2015-12-8 19:34:55 | 显示全部楼层
这样配置没错
回复

使用道具 举报

29

主题

91

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2015-4-24
在线时间
37 小时
 楼主| 发表于 2015-12-12 11:17:58 | 显示全部楼层
回复【8楼】Watmin:
---------------------------------
可是配置的串口三就是发送不了数据。。。让我比较头疼
一起学,一起进步,未来总有你我的一片天空……
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2013-5-3
在线时间
40 小时
发表于 2015-12-12 17:12:42 | 显示全部楼层
“ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; ”,改为50MHz试一下,如果还不行,就需要检查硬件电路,看看TX,RX连接是否正确。
恰如猛虎卧山丘,潜伏爪牙忍受!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 17:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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