OpenEdv-开源电子网

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

串口调试 两个问题

[复制链接]

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
发表于 2013-3-19 15:33:34 | 显示全部楼层 |阅读模式
问题1: 本人采用485调试 控制引脚(nRE)PF11
若PF11配置如下
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOF, &GPIO_InitStructure);
则485工作不正常 经调发现 PF11引脚的设置自动变成了  模拟输入
若PF11配置如下 :
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOF, &GPIO_InitStructure);
则 串口工作正常   区别在于一个配置了IO口的速度 一个没有配置  请问  这有区别吗? 求解!
问题2: 关于波特率
我时钟采用的是  SystemInit(); 调试发现 PCLK1时钟36M 正常
串口波特率设置如下  USART_InitStructure.USART_BaudRate = 9600; 经调试发现 串口实际波特率为3071 baud  相差了3.126倍
于是 程序波特率做如下配置 USART_InitStructure.USART_BaudRate = (9600*3.126);
经调试 发现串口波特率为9602baud  基本正常 为什么会这样? 求解!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-19 18:42:45 | 显示全部楼层
有jtag么?跟踪下你的代码,看看寄存器变化规律.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
 楼主| 发表于 2013-3-20 16:25:32 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
有J_LINK 跟踪了代码 回复【2楼】正点原子:
---------------------------------
通过J_LINK 跟踪寄存器如下
问题一: STM32默认是输入模式 如果没有如下这句设置 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIOF_CRH寄存器中Bit 13 12已经配置成了输入 那么随后这句GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
操作GPIOF_CRH中的Bit 15 14 自然也就配置成了模拟输入 所以配置GPIO为输出前 必须配置GPIO速度
这个问题解决 谢谢
问题二:跟踪USART_BRR寄存器 发现其值为 0x2dc7 经计算 正好是波特率3071 也就是说 虽然库函数配置如下
USART_InitStructure.USART_BaudRate = 9600;  但是实际寄存器中的波特率为3071  说明 错误出现在 从库函数到寄存器转换的过程中 但是为什么在这个过程中出错 至今未找到答案....
附:我用的库函数是3.0版本
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-20 21:26:50 | 显示全部楼层
你进去库函数,看看最终要写入BRR的值,为什么错了?
是不是时钟配置的问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2013-3-21 11:08:11 | 显示全部楼层
回复【3楼】langwanglx:
---------------------------------
估计是库函数的问题。可以考虑用3.5的库函数。
原子哥是不是又要出黑科技了呀。^_^...
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-23 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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