stm32串口学习(一)
串口在工作中经常用到,今天我们从零开始学习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串口学习(一)相关推荐
- STM32串口学习总结(经典)
主函数代码如下: #include "led.h" #include "delay.h" #include "sys.h" #include ...
- stm32串口学习(二)
今天继续学习stm32的串口编程(利用库函数).上次我们说了串口的发送,这次我们说接收. 接收可以用查询的方法,也可以用中断.显然,工程中多用中断的方式,那么就来看看中断接收. 代码其实很简单,基本的 ...
- 学习笔记——stm32串口中断函数的逻辑理解
这片文章主要是讲解原子给的代码里面的串口中断的中断函数,前面是我个人的学习路径. 关于stm32串口的学习,主要分为以下几个点 1.USART的功能和内部结构. 功能包括同步.异步模式.双工通信.半工 ...
- 《STM32从零开始学习历程》——USART串口通讯实验篇1——中断接收与发送
<STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇1--中断接收与发送 最近开始接触了STM32F4xx系列单片机,对于我这个从零开始学习的小白来说,可谓困 ...
- 《STM32从零开始学习历程》——USART串口通讯实验篇2——指令控制LED灯实验
<STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇2--指令控制LED灯实验 本实验是在<USART串口通讯实验篇1--中断接收与发送>的基础上 ...
- STM32串口通信学习总结
STM32串口通信学习总结 1.概述 1.1学习目的 ...
- K210学习笔记(一) K210与STM32串口通信相关
文章目录 前言 一.STM32 串口中断 接收K210板子发送的ASCII码整数 转换为 多位整形数据 二.MAIX BIT(K210)与STM32串口通讯 2.1 实现MAIX BIT与XCOM之间 ...
- K210学习笔记(五)——MAIX BIT(K210)与STM32串口通讯
前言 uart 模块主要用于驱动开发板上的异步串口,可以自由对 uart 进行配置.k210 一共有3个 uart,每个 uart 可以进行自由的引脚映射. 一.MAIX BIT串口使用步骤 1.引脚 ...
- STM32串口通信详解(嵌入式学习)
STM32串口通信 1.通信基础知识 1.1 时钟信号区分 同步通信 异步通信 波特率 总线协议(电气协议) 1.2 通信方式划分 串行通信 并行通信 1.3 通信方向划分 单工通信 半双工通信 全双 ...
最新文章
- opencv 检测直线、线段、圆、矩形
- Spring系列之beanFactory与ApplicationContext
- 一文搞懂深度优先搜索、广度优先搜索(dfs、bfs)
- 【图文并茂】RNN、LSTM、GRU、ConvLSTM、ConvGRU、ST-LSTM的总结
- 蓝桥杯JAVA省赛2013-----B------2(马虎算式)
- simulink怎么生成vxworks的执行程序_Matlab/Simulink基础了解(五):基础Simulink模型搭建及Embedded基础使用...
- 她说程序员不懂浪漫,生日宴上惨变单身狗,其实,程序员的浪漫你不懂!
- 腾讯安全团队深入解析wannacry蠕虫病毒
- ECMAScript 基础--原始值和引用值
- flash文件怎么打开 怎么将swf格式转换成avi视频
- 使用Fiddler监控雷电/夜神模拟器浏览网页:安全警告:该网站的安全证书有问题.解决方案!
- 嵌入式设备查看系统的版本、编译时间、架构等信息(uname命令)
- CleanMyMac4.13最新免费mac电脑系统优化软件
- 《电商后台系统产品逻辑解析》学习笔记
- WPF 布局 - Grid, StackPanel, DockPanel, WrapPanel
- C# EF框架(一)配置
- 使用了可能未初始化的本地指针变量“xxx”
- 15000 字的 SQL 语句大全!
- MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)
- ROS_Kinetic_23 ROS流行版本和相关书籍汇总
热门文章
- NYOJ 79 拦截导弹
- python中list转csv的两种方法
- 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_7_继承中方法的覆盖重写_注意事项...
- mysql 修改字符集
- 小程序开发总结一:mpvue框架及与小程序原生的混搭开发
- shell练习03 安装mysql
- HBase Shell基本操作
- 日积月累-从细节做起
- 交叉线和直连线的线序,做法和使用场合
- Windows10上安装Git 2.10.2详细图解