你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
toofree 发布时间:2019-3-2 02:26
本帖最后由 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, 下载次数: 22)
收藏 评论11 发布时间:2019-3-2 02:26

举报

11个回答
toofree 最优答案 回答时间: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




toofree 最优答案 回答时间:2019-3-10 14:21:14
本帖最后由 toofree 于 2019-3-10 14:22 编辑

补充一下:
程序中应该添加一条 #include <stdio.h>
否则,printf打印变量或数组时有问题,打印常量字符串时没问题。
jeffhe1 回答时间:2019-3-4 08:57:22
真是好詳細
toofree 回答时间:2019-3-4 09:17:11

多谢捧场
legenderw 回答时间:2019-3-10 12:29:01
不错,stm8下比较省心
winddancer7 回答时间:2019-3-10 16:00:39
楼主有没有试一试stm8l001j3的UART1呀?
我自己拿块芯片,外围什么电路都没有,就只是试串口的TX,按照官方资料里给出的代码,5秒延时也加了,芯片还是一直被锁,都有十几片了
期待ing~~
ccfengfw 回答时间:2019-3-10 16:43:40
大牛啊!
toofree 回答时间:2019-3-11 00:42:59
winddancer7 发表于 2019-3-10 16:00
楼主有没有试一试stm8l001j3的UART1呀?
我自己拿块芯片,外围什么电路都没有,就只是试串口的TX,按照官方 ...

让你说得,我都不敢试了
hanzo852 回答时间:2019-6-5 06:30:10
我的stm8L001也是,enable串口时钟就卡着不动,tim4也工作不正常。只有led能点亮。
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版