请选择 进入手机版 | 继续访问电脑版
搜索
查看: 5425|回复: 11

[原创] 【STM8-SO8-DISCO】——8、测试 UART1_Printf

[复制链接]
  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2019-3-2 02:26:17 | 显示全部楼层 |阅读模式
    本帖最后由 toofree 于 2019-3-2 02:35 编辑

    【STM8-SO8-DISCO】——8、测试 UART1_Printf

      本贴测试STM8S001J3M3的串口打印。
      本实验基于样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\UART1\UART1_Printf”,复制全部文件。
    21.jpg

      复制一个工程模板文件夹,改名为“STM8S_StdPeriph_UART1_Printf”,将上一步复制的5个文件,粘贴到本文件夹下。
    22.jpg

      复制上电复位后延时5S的汇编程序
    31.jpg

      在程序最开头添加一条“STARTUP_SWIM_DELAY_5S;”,否则芯片将会被锁(SWIM管脚失效)。
      接下来三条函数“CLK_HSIPrescalerConfig()”、“UART1_DeInit()”、“UART1_Init()”都为库中标准函数,没有做任何修改。
      完成的功能分别是:设置时钟为16MHz、将UART用到的寄存器全部复位、设置新的UART参数。串口参考也很明确,波特率115200、8位数据、1位停止、无校验、串口同步时钟不使能(即异步串口)、收发使能(即全双工)。
      初始化串口完成后,串口打印输出两行测试字符串。在主循环中,接收从上位机串口发送来的数据,并打印输出到上位机串口,回环测试。
    32.jpg

      对串口收、发进行重定义,对应putchar()、getchar()函数,putchar()为printf()功能需要调用的底层
    33.jpg

      用STM8CubeMX生成个STM8S001J3M3的配置,只添加UART1设备,发现UART1_RX、UART1_TX分别被定义到了第1和第5脚。经测试在第5脚上没有输出串口数据。STM8CubeMX坑爹了一把,谨慎使用
    01.jpg

      经查看数据手册,一般UART_TX应该在第8脚。本身第5脚也是有UART_TX功能的,不过是只能算是重映射复用功能,需要重映射才能使用。
    02.jpg

      数据手册显示,两个UART_TX似乎有点不一样,一个带方括号,一个不带。
    11.jpg

      带方括号的为重映射复用功能管脚。
    12.jpg

      不带方括号的为默认复用功能管脚。要使用重映射复用功能的话,需要修改AFR0、AFR1。
    13.jpg

      AFR0、AFR1又属于“选项字节”中的AFR选项。除了ROP是只使用一个字节外,其余选项字节全部由两个字节组成,数据位相反。具体怎么使用“选项字节”,水太深,这里暂时跳过,不用考虑。
    14.jpg
      总之,一句话,UART_TX功能要用第8脚的,第5脚的暂时玩不转。

      综上,最终测试连线,需要用U1(DIP8座子),U1第1、2脚对应功能为UART1_TX、UART_RX,分别连接上位机USB转TTL串口的RX和TX管脚。
    41.jpg

      实验连线如下图。
    42.jpg

      编译,下载程序,并全速运行。
      实验现象为:程序运行5S后,在上位机串口终端窗口打印输出两行测试字符串;接下来进入主循环,上位机键盘敲入字符,经STM8串口接收后,原数返回给上位机。
    42.jpg

      本贴测试工程附上:
       STM8S_StdPeriph_UART1_Printf.rar (260.1 KB, 下载次数: 26)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
     楼主| 发表于 2019-3-2 03:23:26 | 显示全部楼层
    本帖最后由 toofree 于 2019-3-2 15:11 编辑


    直接按模板编译时会报错。主要是STM8S001J3芯片的Flash只有8K,而程序中使用了printf,因此编译出来的目标程序太大了,导致链接不成功。
    61.jpg

    在模板工程的库选项设置中,printf功能支持太全,导致编译出的子程序较大。
    62.jpg

    修改成“samll”级别,编译生成的目标程序就会小很多。
    63.jpg

    在.map文件中,可以看到,代码大小不到4K。最后才能成功生成目标程序。
    64.jpg




    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
     楼主| 发表于 2019-3-10 14:21:14 | 显示全部楼层
    本帖最后由 toofree 于 2019-3-10 14:22 编辑

    补充一下:
    程序中应该添加一条 #include <stdio.h>
    否则,printf打印变量或数组时有问题,打印常量字符串时没问题。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    904

    帖子

    58

    蝴蝶豆

    论坛元老

    最后登录
    2021-3-30
    发表于 2019-3-4 08:57:22 | 显示全部楼层
    真是好詳細
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
     楼主| 发表于 2019-3-4 09:17:11 | 显示全部楼层

    多谢捧场
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    133

    帖子

    0

    蝴蝶豆

    中级会员

    最后登录
    2022-4-29
    发表于 2019-3-10 12:29:01 | 显示全部楼层
    不错,stm8下比较省心
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2022-2-6
    发表于 2019-3-10 16:00:39 | 显示全部楼层
    楼主有没有试一试stm8l001j3的UART1呀?
    我自己拿块芯片,外围什么电路都没有,就只是试串口的TX,按照官方资料里给出的代码,5秒延时也加了,芯片还是一直被锁,都有十几片了
    期待ing~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    274

    帖子

    7

    蝴蝶豆

    金牌会员

    最后登录
    2020-9-2
    发表于 2019-3-10 16:43:40 | 显示全部楼层
    大牛啊!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
     楼主| 发表于 2019-3-11 00:42:59 | 显示全部楼层
    winddancer7 发表于 2019-3-10 16:00
    楼主有没有试一试stm8l001j3的UART1呀?
    我自己拿块芯片,外围什么电路都没有,就只是试串口的TX,按照官方 ...

    让你说得,我都不敢试了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2019-6-11
    发表于 2019-6-5 06:30:10 | 显示全部楼层
    我的stm8L001也是,enable串口时钟就卡着不动,tim4也工作不正常。只有led能点亮。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-16 23:36 , Processed in 0.194720 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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