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串口通信编程相关推荐

  1. 嵌入式作业(七):基于Ardunio的STM32串口通信

    嵌入式作业(七) 0 作业要求 1 Ardunio 完成STM32的串口通信 (1)安装Ardunio IDE (2)stm32串口通信 2 基于串口通信的标准库与hal库的区别 (1)hal库 (2 ...

  2. stm32串口通信(初学者对于串口通信的理解)

    stm32串口通信(初学者对于串口通信的理解) 标签: stm32串口通信单片机 2015-01-24 10:12 987人阅读 评论(0) 收藏 举报  分类: stm32 版权声明:本文为博主原创 ...

  3. C#中串口通信编程 收藏

    C#中串口通信编程 收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports.这个新的框架不但可以访问计算机上的 ...

  4. Visual C++串口通信编程---多线程异步方式

    Visual C++串口通信编程---多线程异步方式 1. 串口通信基础 提到串口让人想起并口,它们是计算机中两个比较重要的通信方式. 串口:也叫COM口,把字节的二进制位按位列队进行传输,每个字节占 ...

  5. Ardunio下的STM32串口通信

    文章目录 任务要求 Ardunio下的STM32串口通信 软件准备 编译烧录 标准库函数与HAL库函数的stm32编程方式差异 国人版的MCU集成开发平台 stduino IDE 总结 任务要求 安装 ...

  6. 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信

    [串口通信]K210与STM32串口通信.K210与OpenMV串口通信 串口通信 前言 为何需要串口通信 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口发送测试 ...

  7. STM32串口通信学习总结

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

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

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

  9. MFC 串口通信编程

    本篇文章主要介绍了"RS-232/RS-485/RS-422 接口简介与编程",主要涉及到RS-232/RS-485/RS-422 接口简介与编程方面的内容,对于RS-232/RS ...

  10. STM32——串口通信实验

    STM32串口通信实验:字符.字符串.数组 准备工作 编程逻辑顺序 初始化结构体 1.USART初始化结构体: 2.同步时钟初始化结构体: 源码 准备工作 1.找一个空白文件,新建usart.c 和u ...

最新文章

  1. 【OpenGL】二、Visual Studio 2019 配置 GitHub ( 下载并安装 GitHub 扩展 | 配置 GitHub )
  2. Gentoo 安装日记 08 (安装stage3: 设置时区 和 Hostname)
  3. 怎么查看电脑内存和配置_电脑内存条如何选择?老司机带你如何选择电脑内存条...
  4. AI入门:无门槛可以玩的神经网络
  5. 沈抚新区机器人产业园怎么_“智慧物流智能AGV技术交流峰会”在长春中日智能制造产业园成功举办...
  6. tcpdump命令---Linux学习笔记
  7. 一款全新的基于IntelliJ和ReSharper的跨平台.NET IDE
  8. LeetCode 1691. 堆叠长方体的最大高度(排序+最大上升子序DP)
  9. [NOIP2012提高组] CODEVS 1200 同余方程(扩展欧几里德算法)
  10. 利用SqlBuikCopy实现数据批量写入
  11. SAP License:SAP Business One系统功能
  12. C语言复变函数PPT,复变函数的孤立点及其应用.doc
  13. 苹果app代码行数统计
  14. 计算机科学与技术的年崭,计算机科学与信息技术学院举行2019届毕业典礼暨表彰大会...
  15. 通过Docker 安装 cloudera manager 平台
  16. 金典指纹考勤机安装及使用操作步骤
  17. 基于CORBA规范的中间件——CORBA基本原理
  18. 有点厉害!用12万行代码堆出来个蔡徐坤,关键是能跑能跳!
  19. ionic4学习笔记11-某东项目热门商品展示
  20. 计算湖泊(岛屿)数量问题

热门文章

  1. putty传文件至服务器,putty传输文件
  2. 破解tinypng文件上传的限制
  3. Mac终端没有命令失效
  4. 企业篇之员工工资管理系统(Java+SQL sever实现)
  5. c语言写一个五子棋小游戏
  6. VS2019 无法打开源文件“stdafx.h“ 问题
  7. 计算机专业英语词汇pdf,计算机专业英语词汇大全(完美打印版).pdf
  8. 软件测试文档模板 ppt,软件工程课件:软件测试用例文档模板.doc
  9. JMeter详细使用教程及实际案例
  10. 关于websocket兼容IE版本