OpenEdv-开源电子网

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

不初始化串口,初始化IO口时会有问题的吗?

[复制链接]

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
发表于 2017-8-8 11:04:51 | 显示全部楼层 |阅读模式
10金钱
先求助一下原子哥,我用的是F4的开发板,最近刚开始学的时候,发现一个很奇怪的事情,程序我放附件里。

注:我LED初始化的函数里,我更改了IO口为PF7和PF8(PF8默认连在蜂鸣器),同时在初始化中置高,还写了一个函数让其置低(该函数在while中循环),另做他用,只是重新保留了叫LED_Init();而已

串口的初始化——"uart_init(115200);",这个语句如果没有的话,只有LED_init和LCD_init初始化,蜂鸣器会响(即对应PF7和PF8都置高,whlie循环中置低不起作用)。我研究了很久发现以下几个情况


1:此时如果将LED_init和LCD_init两个函数初始化换位置,蜂鸣器就不响了,对应了PF7和PF8的IO口输出也正常为低电平。

2:此时如果将LED_init里的IO口在初始化时置低,蜂鸣器也不会响,,对应了PF7和PF8的IO口输出也正常为低电平。

另外还有两个问题:
1:我还在PPT里发现了这么一页,由于串口要打印LCD的ID,表明不初始化串口,LCD屏幕无法点亮,这里我在程序中找到了打印LCD ID的语句,但是判断LCD的ID进行初始化好像和串口无关啊?

2:上述PF7和PF8这两个IO口在串口程序和LCD程序中,都没有共用的情况,怎么就会导致他们缺少串口初始化就输出电平有问题,其他IO口会存在这个问题吗?(对于LCD和串口都没涉及到的IO口)

以上就是我昨天无意中发现的问题,因为纠结了很久,感觉不弄清楚很影响以后的学习,望原子哥能帮忙解答一下这个问题,论坛大佬们也帮忙解惑一下吧
QQ截图20170808105800.png

test.zip

4.82 MB, 下载次数: 120

最佳答案

查看完整内容[请看2#楼]

不是写的很明显了呀,后面的if语句是没有影响,但是printf这句话会调用putchar,然后会调用你的串口输出函数。你没初始化串口,程序跑到这里就会卡死在串口发送的while语句当中,就不会在往下执行了,你可以单步仿真看看。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2017-8-8 11:04:52 | 显示全部楼层
不是写的很明显了呀,后面的if语句是没有影响,但是printf这句话会调用putchar,然后会调用你的串口输出函数。你没初始化串口,程序跑到这里就会卡死在串口发送的while语句当中,就不会在往下执行了,你可以单步仿真看看。
态度决定一切
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-8-8 11:09:18 | 显示全部楼层
PPT写的这么明显!LCD_Init()里面用到了printf()函数来通过串口打印LCD的ID,如果在调用LCD_Init()函数之前没有调用函数usart_init()来初始化串口,那么代码肯定会出问题的!!
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2017-8-8 11:13:11 | 显示全部楼层
zuozhongkai 发表于 2017-8-8 11:09
PPT写的这么明显!LCD_Init()里面用到了printf()函数来通过串口打印LCD的ID,如果在调用LCD_Init()函数之前 ...

串口打印ID和程序后面只是单纯if语句判断LCD ID没有关系吧?

printf(" LCD ID:%x\r\n",lcddev.id); //打印LCD ID
if(lcddev.id==0X9341)       

而且我更想知道的是为什么会对其他无关的IO口产生影响?还是PF7和PF8其实在哪里是有关的
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2017-8-8 12:01:05 | 显示全部楼层
冰封嗜魔 发表于 2017-8-8 11:43
不是写的很明显了呀,后面的if语句是没有影响,但是printf这句话会调用putchar,然后会调用你的串口输出函 ...

原来如此,就是说一但卡死在串口发送的while里面,导致我本身while里面想置低PF7和PF8就不起作用?除非一开始在初始化中置低

那么为什么LCD和LED换位置就不会影响我IO口呢
回复

使用道具 举报

1

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2017-5-10
在线时间
55 小时
发表于 2017-8-8 12:17:32 来自手机 | 显示全部楼层
142zjb 发表于 2017-8-8 12:01
原来如此,就是说一但卡死在串口发送的while里面,导致我本身while里面想置低PF7和PF8就不起作用?除非一 ...

先初始化lcd就会卡死在printf那句根本不会继续初始化led,自然就不会响
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2017-8-8 13:56:25 | 显示全部楼层
142zjb 发表于 2017-8-8 12:01
原来如此,就是说一但卡死在串口发送的while里面,导致我本身while里面想置低PF7和PF8就不起作用?除非一 ...

你先初始化LED,那自然IO口初始化是有效的;但是先初始化LCD,后面的LED的IO就无法完成初始化。
态度决定一切
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2017-8-8 15:31:23 | 显示全部楼层
cromarti 发表于 2017-8-8 12:17
先初始化lcd就会卡死在printf那句根本不会继续初始化led,自然就不会响

对啊,果然编程经验不够,脑子没转过来
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2017-8-8 15:31:48 | 显示全部楼层
冰封嗜魔 发表于 2017-8-8 13:56
你先初始化LED,那自然IO口初始化是有效的;但是先初始化LCD,后面的LED的IO就无法完成初始化。

谢谢了,确实是这么回事
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-3 18:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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