OpenEdv-开源电子网

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

在NUCLEO-F767ZI上移植阿波罗串口程序printf输出出现乱码

[复制链接]

14

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2016-8-4
在线时间
71 小时
发表于 2017-6-24 10:25:42 | 显示全部楼层 |阅读模式
32金钱
        我用的ST公司的NUCLEO-F767ZI开发板,然后我移植原子哥的阿波罗开发板的标准历程-HAL库版本实验3串口通信实验,运行完后下载到NUCLEO开发板,然后PA9、PA10、GND通过CH340接到电脑       然后串口却一直显示“噜???噜?帱??帱?帱?????噜???噜?帱??帱?帱?????噜???噜?帱??帱?帱?????噜?”乱码,然后我printf("123"),显示的是“????????”乱码,最后发现输出数字和汉字都是 “噜?帱”,然后数据也接收不了,之后我写了个简单的串口LED控制,接收到1,灯就亮,2就灭,然后串口接收到了显示出来也是乱码,但是我把PA9,PA10短接,发送1灯就亮,2就灭,这个开发板自己可以正确读取自己发来的信息,感觉printf应该没问题,但是一旦发送到电脑串口就 显示乱码, 然后我用wifi模块,往wifi上发送AT指令,wifi一直无法与我的电脑相连,用原子哥的Mini开发板和战舰开发板的通信历程就可以,最后我用其他的串口打印也是这样,调了好些天了,这是怎么个回事,是不是NUCLEO板子上有些其他的设置或者啥的,求大神老公抱。。。。。。。。。。。。。。。。。。

串口显示

串口显示

NUCLEO开发板

NUCLEO开发板

最佳答案

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

检查系统时钟设置!接上STLINK调试!查看SystemCoreClock的是是不是216M,调试检查PCLK1,PCKL2的值都正不正确!就串口而言F767 Nucelo板子和阿波罗F7的唯一区别就是系统时钟设置,F767 Nucleo模式使用的8M 的HSE BYPASS模式,或者是内置的16M HSI
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-6-24 10:25:43 | 显示全部楼层
检查系统时钟设置!接上STLINK调试!查看SystemCoreClock的是是不是216M,调试检查PCLK1,PCKL2的值都正不正确!就串口而言F767 Nucelo板子和阿波罗F7的唯一区别就是系统时钟设置,F767 Nucleo模式使用的8M 的HSE BYPASS模式,或者是内置的16M HSI
回复

使用道具 举报

14

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2016-8-4
在线时间
71 小时
 楼主| 发表于 2017-6-24 16:25:32 | 显示全部楼层
zuozhongkai 发表于 2017-6-24 11:45
检查系统时钟设置!接上STLINK调试!查看SystemCoreClock的是是不是216M,调试检查PCLK1,PCKL2的值都正不正 ...

Nucelo用的是16M时钟源,然后我在原子的串口例程例发现
uint32_t SystemCoreClock = 16000000;
是不是要把这个SystemCoreClock 值改了?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-6-24 17:44:54 | 显示全部楼层
代号_47k 发表于 2017-6-24 16:25
Nucelo用的是16M时钟源,然后我在原子的串口例程例发现
uint32_t SystemCoreClock = 16000000;
是不是 ...

说了让你仿真调试查看 SystemCoreClock!这值在代码运行的时候会修改掉!
开往春天的手扶拖拉机
回复

使用道具 举报

14

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2016-8-4
在线时间
71 小时
 楼主| 发表于 2017-6-24 21:36:57 | 显示全部楼层
zuozhongkai 发表于 2017-6-24 17:44
说了让你仿真调试查看 SystemCoreClock!这值在代码运行的时候会修改掉!

哦哦,我下午仔细看了看原子哥的时钟视频,然后发现nucleo上用的是 内部16兆时钟,然后照着原子的讲解改了改程序,    sys.c里的时钟配置
    RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;    //时钟源为HSE
    RCC_OscInitStructure.HSEState=RCC_HSE_ON;                      //打开HSE
    RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON;                                   //打开PLL
    RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSI;          //PLL时钟源选择低速
    RCC_OscInitStructure.PLL.PLLM=pllm;        //主PLL和音频PLL分频系数(PLL之前的分频)
    RCC_OscInitStructure.PLL.PLLN=plln; //主PLL倍频系数(PLL倍频)
    RCC_OscInitStructure.PLL.PLLP=pllp; //系统时钟的主PLL分频系数(PLL之后的分频)
    RCC_OscInitStructure.PLL.PLLQ=pllq; //USB/SDIO/随机数产生器等的主PLL分频系数(PLL之后的分频)
    ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化


然后  主函数里  Stm32_Clock_Init(432,16,7,9);   //设置时钟,216Mhz  NUCLEO用的内部低速16兆
就可以了,谢谢你哈,时钟没配置好。

回复

使用道具 举报

14

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2016-8-4
在线时间
71 小时
 楼主| 发表于 2017-6-24 21:37:08 | 显示全部楼层
zuozhongkai 发表于 2017-6-24 17:44
说了让你仿真调试查看 SystemCoreClock!这值在代码运行的时候会修改掉!

哦哦,我下午仔细看了看原子哥的时钟视频,然后发现nucleo上用的是 内部16兆时钟,然后照着原子的讲解改了改程序,    sys.c里的时钟配置
    RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;    //时钟源为HSE
    RCC_OscInitStructure.HSEState=RCC_HSE_ON;                      //打开HSE
    RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON;                                   //打开PLL
    RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSI;          //PLL时钟源选择低速
    RCC_OscInitStructure.PLL.PLLM=pllm;        //主PLL和音频PLL分频系数(PLL之前的分频)
    RCC_OscInitStructure.PLL.PLLN=plln; //主PLL倍频系数(PLL倍频)
    RCC_OscInitStructure.PLL.PLLP=pllp; //系统时钟的主PLL分频系数(PLL之后的分频)
    RCC_OscInitStructure.PLL.PLLQ=pllq; //USB/SDIO/随机数产生器等的主PLL分频系数(PLL之后的分频)
    ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化
然后  主函数里  Stm32_Clock_Init(432,16,7,9);   //设置时钟,216Mhz  NUCLEO用的内部低速16兆
就可以了,谢谢你哈,时钟没配置好。

回复

使用道具 举报

14

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2016-8-4
在线时间
71 小时
 楼主| 发表于 2017-6-24 21:39:10 | 显示全部楼层
zuozhongkai 发表于 2017-6-24 17:44
说了让你仿真调试查看 SystemCoreClock!这值在代码运行的时候会修改掉!

哦哦,我下午仔细看了看原子哥的时钟视频,然后发现nucleo上用的是 内部16兆时钟,然后照着原子的讲解改了改程序,    sys.c里的时钟配置
    RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSI;          //PLL时钟源选择低速
设置为了低速,然后在main函数里    Stm32_Clock_Init(432,16,7,9);   //设置时钟,216Mhz  NUCLEO用的内部低速16兆   修改了一下参数,然后就正常了,都是时钟没配置好,M7的时钟好多知识啊 ,谢谢你 哈 。


回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 10:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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