串口在工作中经常用到,今天我们从零开始学习stm32的串口编程(利用库函数)。

先从最简单的情况开始,假设我们要实现的功能就是串口发送一个字节,不考虑接收,也不考虑中断。

那么要解决两个问题:

1 串口的初始化

2 发送一个字节

对于1,我们看看代码。

<span style="font-size:18px;">//bound 表示波特率
void uart_init(u32 bound)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);//使能USART1和GPIOA的时钟//USART1_TX   PA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9//USART1_RX      PA.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA10//USART 的设置USART_DeInit(USART1);  //复位串口1USART_InitStructure.USART_BaudRate = bound;//波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //收发模式USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE);                    //串口使能}</span>

这样就完成了基本设置。

对于2,我们用下面的代码,假如发送的字节是0x20,

<span style="font-size:18px;">USART_SendData(USART1, 0x20);//发送数据0x20
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发射结束</span>

这样就实现了最基本的发送功能。

现在引出这样一个问题,怎样使用Printf函数往串口发送数据?其实解决方法有很多,这里给出一种方法(也是参考网上的)

我们只需要添加这样一段代码:

<span style="font-size:18px;">#pragma import(__use_no_semihosting)                           struct __FILE
{ int handle; }; FILE __stdout;    //定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{ x = x;
} //重定义fputc()函数
int fputc(int ch, FILE *f)
{      while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); USART_SendData(USART1,(uint8_t)ch);   return ch;
}</span>

为什么要这样写,具体原因我先不管,先把问题提出来:

1.为什么这样写,每一条语句都是什么意思?

2.printf()函数的定义在哪里?(我在Keil中没有找到)如果没有定义,是不是已经由IDE做成了库,那么库文件在哪里?对于没有操作系统的裸板开发,用户调用的“标准C库”是从哪里来的?是开发环境自带的吗?

main函数如下:

<span style="font-size:18px;">int main(void)
{   u8 i = 0;delay_init();       //延时函数初始化    uart_init(9600);     //串口初始化,波特率9600while(1){delay_ms(500);printf("我是好学生 %d\r\n\r\n",i);++i;}}</span>

测试结果如图:

stm32串口学习(一)相关推荐

  1. STM32串口学习总结(经典)

    主函数代码如下: #include "led.h" #include "delay.h" #include "sys.h" #include ...

  2. stm32串口学习(二)

    今天继续学习stm32的串口编程(利用库函数).上次我们说了串口的发送,这次我们说接收. 接收可以用查询的方法,也可以用中断.显然,工程中多用中断的方式,那么就来看看中断接收. 代码其实很简单,基本的 ...

  3. 学习笔记——stm32串口中断函数的逻辑理解

    这片文章主要是讲解原子给的代码里面的串口中断的中断函数,前面是我个人的学习路径. 关于stm32串口的学习,主要分为以下几个点 1.USART的功能和内部结构. 功能包括同步.异步模式.双工通信.半工 ...

  4. 《STM32从零开始学习历程》——USART串口通讯实验篇1——中断接收与发送

    <STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇1--中断接收与发送 最近开始接触了STM32F4xx系列单片机,对于我这个从零开始学习的小白来说,可谓困 ...

  5. 《STM32从零开始学习历程》——USART串口通讯实验篇2——指令控制LED灯实验

    <STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇2--指令控制LED灯实验 本实验是在<USART串口通讯实验篇1--中断接收与发送>的基础上 ...

  6. STM32串口通信学习总结

                                                                             STM32串口通信学习总结 1.概述 1.1学习目的 ...

  7. K210学习笔记(一) K210与STM32串口通信相关

    文章目录 前言 一.STM32 串口中断 接收K210板子发送的ASCII码整数 转换为 多位整形数据 二.MAIX BIT(K210)与STM32串口通讯 2.1 实现MAIX BIT与XCOM之间 ...

  8. K210学习笔记(五)——MAIX BIT(K210)与STM32串口通讯

    前言 uart 模块主要用于驱动开发板上的异步串口,可以自由对 uart 进行配置.k210 一共有3个 uart,每个 uart 可以进行自由的引脚映射. 一.MAIX BIT串口使用步骤 1.引脚 ...

  9. STM32串口通信详解(嵌入式学习)

    STM32串口通信 1.通信基础知识 1.1 时钟信号区分 同步通信 异步通信 波特率 总线协议(电气协议) 1.2 通信方式划分 串行通信 并行通信 1.3 通信方向划分 单工通信 半双工通信 全双 ...

最新文章

  1. opencv 检测直线、线段、圆、矩形
  2. Spring系列之beanFactory与ApplicationContext
  3. 一文搞懂深度优先搜索、广度优先搜索(dfs、bfs)
  4. 【图文并茂】RNN、LSTM、GRU、ConvLSTM、ConvGRU、ST-LSTM的总结
  5. 蓝桥杯JAVA省赛2013-----B------2(马虎算式)
  6. simulink怎么生成vxworks的执行程序_Matlab/Simulink基础了解(五):基础Simulink模型搭建及Embedded基础使用...
  7. 她说程序员不懂浪漫,生日宴上惨变单身狗,其实,程序员的浪漫你不懂!
  8. 腾讯安全团队深入解析wannacry蠕虫病毒
  9. ECMAScript 基础--原始值和引用值
  10. flash文件怎么打开 怎么将swf格式转换成avi视频
  11. 使用Fiddler监控雷电/夜神模拟器浏览网页:安全警告:该网站的安全证书有问题.解决方案!
  12. 嵌入式设备查看系统的版本、编译时间、架构等信息(uname命令)
  13. CleanMyMac4.13最新免费mac电脑系统优化软件
  14. 《电商后台系统产品逻辑解析》学习笔记
  15. WPF 布局 - Grid, StackPanel, DockPanel, WrapPanel
  16. C# EF框架(一)配置
  17. 使用了可能未初始化的本地指针变量“xxx”
  18. 15000 字的 SQL 语句大全!
  19. MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)
  20. ROS_Kinetic_23 ROS流行版本和相关书籍汇总

热门文章

  1. NYOJ 79 拦截导弹
  2. python中list转csv的两种方法
  3. 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_7_继承中方法的覆盖重写_注意事项...
  4. mysql 修改字符集
  5. 小程序开发总结一:mpvue框架及与小程序原生的混搭开发
  6. shell练习03 安装mysql
  7. HBase Shell基本操作
  8. 日积月累-从细节做起
  9. 交叉线和直连线的线序,做法和使用场合
  10. Windows10上安装Git 2.10.2详细图解