串口是单片机嵌入式必不可少的外设,它上手简单,使用方便,很受小伙伴的欢迎。

用STM32CubeMX体验下STM32F103的串口,硬件平台采用百问网STM32F103mini开发板。

生成的一些代码:

此时,我们可以调用下面两个接口来实现串口数据的收发:

HAL_UART_Receive
HAL_UART_Transmit

我们在pc上开发不是经常使用printf吗,如何在单片机上使用使用printf呢?

这就需要重定向了。

printf和scanf会分别调用“fputc()”和“fgetc()”,因此这里覆写这两个函数,使用HAL提供的函数实现
收发数据。
同时,还需要需要点击“ ”,打开工程选项界面,切换到“Target”标签,勾选上“Use MicroLIB”。

/*****************************************************
*function: 写字符文件函数
*param1: 输出的字符
*param2: 文件指针
*return: 输出字符的 ASCII 码
******************************************************/
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);return ch;
}
/*****************************************************
*function: 读字符文件函数
*param1: 文件指针
*return: 读取字符的 ASCII 码
******************************************************/
int fgetc(FILE *f)
{uint8_t ch = 0;HAL_UART_Receive(&huart1, (uint8_t*)&ch, 1, 10);return (int)ch;
}

如果不勾选上“Use MicroLIB”,还需要再添加下面代码:

/*
* 添加如下代码,可不在工程设置中勾选 Use MicroLIB
*/
#pragma import(__use_no_semihosting)
struct __FILE
{
int a;
};
FILE __stdout;
FILE __stdin;
void _sys_exit(int x)
{
}

最后别忘了添加头文件#include <stdio.h>

最后在main函数中添加测试代码:

 printf("百问科技 www.100ask.net\n\r");printf("UART 实验\n\r");printf("test char = %c,%c\n\r", 'H', 'c');printf("test string1 = %s\n\r", "www.100ask.net");printf("test string2 = %s\n\r", "深圳百问网科技有限公司");printf("test decimal1 number = %d\n\r", 123456);printf("test decimal2 number = %d\n\r", -123456);printf("test hex1 number = 0x%x\n\r", 0x123456);printf("test hex2 number = 0x%08x\n\r", 0x123456);printf("test float = %.5f\n\r", 3.1415);printf("test double = %.10lf\n\r", 3.141592653);printf("\r\n 键盘输入‘C’或者‘c’控制串口打印‘Hello world’");while(1){scanf("%c", &cmd);if(cmd=='C' || cmd=='c'){cmd = 0;printf("\r\nHello World.");}HAL_Delay(100);}

简单聊下STM32F103的串口相关推荐

  1. 简单聊下STM32F103的时钟

    对于芯片而言,电源和时钟是缺一不可的. 电源为芯片提供能量,时钟则提供时间基准,芯片好按照这个tick依次执行指令. STM32F103是一款性价比很好的芯片,它的时钟树长这样: 它有4个时钟源,不同 ...

  2. 简单聊下STM32F103的GPIO

    GPIO是芯片和外界沟通的桥梁,GPIO有很多模式,不同的模式有不同的配置,应用于不同的场合. STM32F103系列的I/O引脚共有8种工作模式, 输入模式有四种 浮空输入 上拉输入 下拉输入 模拟 ...

  3. 简单聊下STM32F103的中断

    中断 当cpu在执行指令时,遇到一些突发状况,不得不先处理这些突发状况,处理完毕后再返回原来执行指令处继续执行,这里的突然状况被称为中断或异常. 中断示意图如下: STM32F103的中断系统很强大, ...

  4. Esp8266 进阶之路25【高级篇】深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  5. 工作篇 之 简单聊下有关环信的 “坑” ...

    LZ-Says:相遇,相知,相恋,争执,平淡,压抑,愤懑,该画上句号了. 前言 环信,Enmmm,牛逼,懵 ing -! 最近这段时间一直围绕环信,在使用的过程中,遇到很多很多问题,自己都感觉蒙圈,烦 ...

  6. 简单聊下中台概念与发展

    什么是中台 中台可以视作是支持多个前台业务中具有公共业务属性的能力组织. 所以他有组织+系统两个层面的事情.需要有个自运营的组织,对外提供的是抽象的服务. 钟华老师说:中台是将企业核心能力以服务化形式 ...

  7. 简单聊下5G与V2X

    V2X是将车辆与一切事物相连接的新一代信息通信技术,其中V代表车辆,X代表任何与车交互信息的对象,包括车.人.交通路侧基础设施和网络.V2X是通过专用通信协议和频谱实现一定区域内.一定条件下的数据互通 ...

  8. java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 附上蓝牙串口通讯代码, package com.test.BTClient; import java.io.File; import java.io.Fi ...

  9. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

最新文章

  1. (转)Sublime Text2 快捷键汇总
  2. 下列哪个可以选中矩形文字块_PPT很难?一个字母就可以搞定
  3. Log4j显示异常的奇怪问题
  4. 如何解决多地开视频会议直播问题?
  5. 互联网协议 — TLS — SNI
  6. mysql 移植 azure_初码-Azure系列-记一次MySQL数据库向Azure的迁移
  7. 正交相机下实现滚轮按钮拖动,滚动滚轮缩放的功能
  8. vue项目中使用echarts实现词云
  9. 由浅到深了解JavaScript类
  10. Lighttpd日志打印格式
  11. 类QQ右下角弹出框(Qt)
  12. 密码学在区块链隐私保护中的应用学习
  13. Java基础学习总结(50)——Java事务处理总结
  14. ip地址和MAC地址的捆绑
  15. 华景机器人怎么控制_【扫地机器人选购】支持华为hilink智能家居联动/支持华为小艺语音控制的扫地机器人...
  16. samba配置过程(附网络凭据的解决方法)
  17. 重读领域驱动设计——如何说好一门通用语言
  18. 怎么能防止网站被注入eval(base64_decode这种类型的木马?
  19. python自相关函数提取基音周期_Python语音基础操作--4.2基音周期检测
  20. 发声 | 再访《Scratch少儿趣味编程》系列图书作者阿部和广访谈问题有奖征集...

热门文章

  1. 量化投资学习-13:一张图残酷的展现了庄家、量化交易者、散户的盈利空间的对比
  2. 云开发(一)认识云开发
  3. FM原理详细介绍(写得很好)
  4. 数字滤波器回顾与解析
  5. 华邦存储器W25Q80, W25Q16, W25Q32系列的spi通讯
  6. CARLA_0.8.2 相关问题
  7. Android 8.0 RIL框架分析
  8. 用区块链时,你要考虑哪些问题?
  9. 【摩客专访】简单易用的背后是吹毛求疵的追求 | 专访“方片收集”作者田飞
  10. 手把手教你Java项目源码安全审查!