213|2

24

帖子

0

资源

一粒金砂(中级)

【NUCLEO-L552ZE测评】+串口打印终于成功啦! [复制链接]

之前发了一个帖子求助串口打印,因为我是一直用的MDK+标准库,最近刚好学CUBE+HAL库那一套,所以刚好拿这块板子练手,这两天抽时间终于搞定了,下面我详细写一下过程:

 先感谢一下在帖子里面帮助和鼓励我的小伙伴们

我用cubeMX里面的NUCLEO模板直接生成了CUBEIDE工程,之前试过L552ZE库里面的template,发现不好用,我将工程移出后文件路径不对,如果使用单个的sample例程,后面添加又太麻烦,就直接用了MX里面的工程直接生成,将用到的基础IO都配置好了,但是都没初始化,初始化代码在main.c和stm32l5xx_hal_msp.c这两个文件里, 我用的是USART2,PD5和PD6两只引脚    1.png

                                                       图1

上面图里面就是main.c初始化的一些函数,工程默认的

2.png                                                            图2

3.png

                                                        图3

图2和图3是stm32l5xx_hal_msp.c中的初始化函数,讲一点,在我们初始化main函数的时候,这里面的 函数是不需要放在main.c里面的,因为main.c里面的初始化函数会调用这里面的         然后我以为初始化之后,在main函数里面重写fput函数,main循环里面加入printf就可以打印了,搞了好久还是不行,最后没办法参照原子哥的F4的hal库例程,发现串口根本就没用初始化

4.png                                                           图4

上图中我画红色的部分是自己添加的,就是说mx生成的工程并没有帮我们初始化,这是关键的一点,然后我们还要添加两个函数void USART2_IRQHandler(void)和void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart),串口2的中断函数和接收回调函数,推荐大家看一下这篇文章,

讲的非常清楚【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解,  但是他里面有点不适用在我这边,我后面讲--就是重写fput这个函数

然后再结合原子哥的例程,我贴上关键部分的代码

6.png                                                     图5

 

5.png                                                    图6

图5和图6是中断函数里面的两段,到此为止,我以为可以了,但是还是不行,又搞了好久,关于重写fput这段函数,我参照了上面链接那位兄弟写的和原子哥里面的例程,发现都不行,

但是我用这个函数:    HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);    /发现我可以发送数据,板子也能讲数据返回,说明问题出现在了fput这段上面

首先记得要在main函数里先 #include "stdio.h",你的fput函数放在哪个.c文件里面,就要在哪个文件里面加上这句

7.png                                               图7

上部分是原子哥的代码,我改了

////    while((USART2->ISR&0X40)==0);
////    USART2->RDR = (uint8_t) ch;这两段中的红色寄存器,我还没看仔细,具体对不对暂时还不清楚,大家可以帮忙看一下,这两个寄存器到底什么意思,该怎么用才对

最后我又找网上关于fput这段函数,找到一个能用的

//#ifdef __GNUC__
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
//#else
//  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
//#endif
//

PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart2,(uint8_t *)&ch,1,0xFFFF);//阻塞方式打印
  return ch;
}

绿色部分是我注释掉的,效果没什么变化,终于可以打印出来了

 

8.png                                      图8

很开心,搞了几天终于出结果了,而且还熟悉了cube和hal库,感觉越来越上手了,后面会加上ADC采集我做的一块荧光检测电路中的ad值

最后还有一个疑问,上面这个printf打印不了中文,中文出来是乱码,不知道怎么回事,希望各位兄弟大神帮忙指导指导,是否有错误和需要改进的地方,

谢谢大家,感谢各位伙伴们的帮助和鼓励

 

                               

此帖出自stm32/stm8论坛

赞赏

1

查看全部赞赏


回复

677

帖子

2

资源

版主

Print打印不出中文应该是编码的问题,IDE编码改一下。

点评

ok,我今天再搞一搞  详情 回复 发表于 6 天前

回复

24

帖子

0

资源

一粒金砂(中级)

w494143467 发表于 2021-1-10 10:32 Print打印不出中文应该是编码的问题,IDE编码改一下。

ok,我今天再搞一搞


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表