第七篇,STM32串口通信编程
1.通信的基本概念
(1)串行通信和并行通信
(2)单工,半双工和全双工
(3)通信速率
单位时间内传输的比特数表示传输速度,叫做波特率(bps)
(4)通信协议(串口)
通信协议就是通信双方约定好的数据格式
2.串口的硬件连接
UART ----------------- 通用异步收发器
USART --------------- 通用同步/异步收发器
3.stm32的串口开发
(1)原理图
USB调试口连接到了CPU的PA9 PA10,它们具有串口复用的功能
(2)CPU芯片手册
(3)串口接口的编程实现
在工程中添加串口库函数源码
1)开启GPIOA和USART1的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
2)将PA9 PA10配置为复用功能,并且映射到串口1
GPIO_Init(...); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
3)初始化串口
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); 参数: USARTx - 哪个串口
USART_InitStruct - 串口初始化结构
typedef struct
{
uint32_t USART_BaudRate; /*!< 波特率 */
uint16_t USART_WordLength; /*!< 数据位长度 @ref USART_Word_Length */
uint16_t USART_StopBits; /*!< 停止位长度 @ref USART_Stop_Bits */
uint16_t USART_Parity; /*!< 校验方式 @ref USART_Parity */
uint16_t USART_Mode; /*!< 发送/接收模式 @ref USART_Mode */
uint16_t USART_HardwareFlowControl; /*!< 硬件流控制 @ref USART_Hardware_Flow_Control */ } USART_InitTypeDef;
4)使能串口
USART_Cmd(USART1,ENABLE);
5)数据的发送和接收
发送:
//轮询
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
//传入往哪个串口发送什么数据
//每次发送前查询上一个数据是否发送完成
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
//传入哪个串口的什么标志,返回SET表示有该标志,返回RESET表示没有该标志
//USART_FLAG_TC ----- 发送完成标志
———————————————————————————————————————————
练习:
实现串口1字符串的发送
———————————————————————————————————————————
//功能函数代码
#include <stm32f4xx.h>
#include <usart.h>
#include <stdio.h>
#include <string.h>
#include <includes.h>//stm32开发板上运行程序,如果主机运行了调试器,程序就会使用主机的输入输出设备
//这是方式叫半主机模式,printf如果要通过串口打印,必须关闭半主机模式
#pragma import(__use_no_semihosting)struct __FILE{int handle;
};FILE __stdout;//定义_sys_exit函数避免使用半主机模式
void _sys_exit(int x)
{x = x;
}//重定义fputc
int fputc(int ch,FILE *F)
{//等待上一个数据发送完成while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//发送USART_SendData(USART1,ch);return ch;
}void usart1_init(void)
{GPIO_InitTypeDef GPIO_InitStruct;USART_InitTypeDef USART_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//1.开启GPIOA和USART1时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//2.配置PA9 PA10为串口功能GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//复用模式GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//高速GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//3.初始化串口 8N1USART_InitStruct.USART_BaudRate = 115200;//波特率USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8位数据位USART_InitStruct.USART_StopBits = USART_StopBits_1;//1位停止位USART_InitStruct.USART_Parity = USART_Parity_No;//无校验USART_InitStruct.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;//发送接收模式USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控制USART_Init(USART1,&USART_InitStruct);//4.开启串口接收中断(清除中断标志)USART_ClearITPendingBit(USART1, USART_IT_RXNE);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//5.初始化NVICNVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x2;//抢占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x2;//响应优先级NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能NVIC_Init(&NVIC_InitStruct);//.使能串口USART_Cmd(USART1,ENABLE);
}//发送一个字符(轮询)
void uart1_putc(char ch)
{//等待上一个数据发送完成while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);USART_SendData(USART1,ch);
}
第七篇,STM32串口通信编程相关推荐
- 嵌入式作业(七):基于Ardunio的STM32串口通信
嵌入式作业(七) 0 作业要求 1 Ardunio 完成STM32的串口通信 (1)安装Ardunio IDE (2)stm32串口通信 2 基于串口通信的标准库与hal库的区别 (1)hal库 (2 ...
- stm32串口通信(初学者对于串口通信的理解)
stm32串口通信(初学者对于串口通信的理解) 标签: stm32串口通信单片机 2015-01-24 10:12 987人阅读 评论(0) 收藏 举报 分类: stm32 版权声明:本文为博主原创 ...
- C#中串口通信编程 收藏
C#中串口通信编程 收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports.这个新的框架不但可以访问计算机上的 ...
- Visual C++串口通信编程---多线程异步方式
Visual C++串口通信编程---多线程异步方式 1. 串口通信基础 提到串口让人想起并口,它们是计算机中两个比较重要的通信方式. 串口:也叫COM口,把字节的二进制位按位列队进行传输,每个字节占 ...
- Ardunio下的STM32串口通信
文章目录 任务要求 Ardunio下的STM32串口通信 软件准备 编译烧录 标准库函数与HAL库函数的stm32编程方式差异 国人版的MCU集成开发平台 stduino IDE 总结 任务要求 安装 ...
- 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信
[串口通信]K210与STM32串口通信.K210与OpenMV串口通信 串口通信 前言 为何需要串口通信 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口发送测试 ...
- STM32串口通信学习总结
STM32串口通信学习总结 1.概述 1.1学习目的 ...
- STM32串口通信详解(嵌入式学习)
STM32串口通信 1.通信基础知识 1.1 时钟信号区分 同步通信 异步通信 波特率 总线协议(电气协议) 1.2 通信方式划分 串行通信 并行通信 1.3 通信方向划分 单工通信 半双工通信 全双 ...
- MFC 串口通信编程
本篇文章主要介绍了"RS-232/RS-485/RS-422 接口简介与编程",主要涉及到RS-232/RS-485/RS-422 接口简介与编程方面的内容,对于RS-232/RS ...
- STM32——串口通信实验
STM32串口通信实验:字符.字符串.数组 准备工作 编程逻辑顺序 初始化结构体 1.USART初始化结构体: 2.同步时钟初始化结构体: 源码 准备工作 1.找一个空白文件,新建usart.c 和u ...
最新文章
- 【OpenGL】二、Visual Studio 2019 配置 GitHub ( 下载并安装 GitHub 扩展 | 配置 GitHub )
- Gentoo 安装日记 08 (安装stage3: 设置时区 和 Hostname)
- 怎么查看电脑内存和配置_电脑内存条如何选择?老司机带你如何选择电脑内存条...
- AI入门:无门槛可以玩的神经网络
- 沈抚新区机器人产业园怎么_“智慧物流智能AGV技术交流峰会”在长春中日智能制造产业园成功举办...
- tcpdump命令---Linux学习笔记
- 一款全新的基于IntelliJ和ReSharper的跨平台.NET IDE
- LeetCode 1691. 堆叠长方体的最大高度(排序+最大上升子序DP)
- [NOIP2012提高组] CODEVS 1200 同余方程(扩展欧几里德算法)
- 利用SqlBuikCopy实现数据批量写入
- SAP License:SAP Business One系统功能
- C语言复变函数PPT,复变函数的孤立点及其应用.doc
- 苹果app代码行数统计
- 计算机科学与技术的年崭,计算机科学与信息技术学院举行2019届毕业典礼暨表彰大会...
- 通过Docker 安装 cloudera manager 平台
- 金典指纹考勤机安装及使用操作步骤
- 基于CORBA规范的中间件——CORBA基本原理
- 有点厉害!用12万行代码堆出来个蔡徐坤,关键是能跑能跳!
- ionic4学习笔记11-某东项目热门商品展示
- 计算湖泊(岛屿)数量问题
热门文章
- putty传文件至服务器,putty传输文件
- 破解tinypng文件上传的限制
- Mac终端没有命令失效
- 企业篇之员工工资管理系统(Java+SQL sever实现)
- c语言写一个五子棋小游戏
- VS2019 无法打开源文件“stdafx.h“ 问题
- 计算机专业英语词汇pdf,计算机专业英语词汇大全(完美打印版).pdf
- 软件测试文档模板 ppt,软件工程课件:软件测试用例文档模板.doc
- JMeter详细使用教程及实际案例
- 关于websocket兼容IE版本