STM32USART实验——串口通讯

一、通讯基本概念

1、数据传输的方式

① 串行通讯

指设备之间通过少 量数据信号线(一般是 8根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。就像是单车道的公路,同一时刻只能传输一个数据为的数据。

② 并行通讯

指使用 8、16、32 及 64 根或更多的数据线进行传输的通讯方式,就像多个车道的公路,可以同时传输多个数据位的数据。

③ 两者对比

在这里插入图片描述
(不过由于并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著 影响通讯性能,现在随着技术的发展,越来越多的应用场合采用高速率的串行差分传输。)

2、数据通讯的方向
① 全双工

在同一时间,两个设备之间可以同时收发数据,如:手机等。

② 半双工

两个设备之间可以收发数据,但不能在同一时刻进行,如:对讲机等。

③ 单工

在任何时刻都只能进行一个方向的通讯,即一个固定为发送设备,另一个固定为接收设备,如:饭卡和读卡器之间,收音机等。

3、通讯的数据同步方式

① 同步通讯

收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,即:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

② 异步通讯

不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,即:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

二、USART串口通信

1、串口通讯协议简介

① 物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输

② 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准

2、STM32 的 USART 简介

通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一 个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个 UART(Universal Asynchronous Receiver and Transmitter),它是在 USART基础上裁剪掉了同步通信功能,只有异步通信。USART 在 STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一 个USART通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的 串口调试助手工具上,从而了解程序运行是否正确、如果出错哪具体哪里出错等等

3、USART 功能框图

具体说明请参考野火的 《零死角玩转STM32—F103指南者》,上面的原理和功能部分的概述已经讲得十分详细。或者也可参考这篇文章: link.

三、USART串口通信实践

1.实验环境

野火MINI(STM32F103RC)
IDE:KEIL5 MDK
实验串口:USART1
STM32开发板串口硬件原理图:

在这里插入图片描述2.实验目的

STM32不断的给电脑发送“hello windows!”;只有当输入 “Stop,stm32!”后,STM32才终止向电脑发送消息。

3.新创建三个子文件,bsp_usart.c,bsp_usart.h,main.c,并将三个文件添加到以引入STM32固件库的工程中。
bsp_usart.h代码:


#ifndef __BSP_USART_H__
#define __BSP_USART_H__

#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>

/******************************************************
		串口的宏定义:总线时钟宏和GPIO的宏
*******************************************************/

// 串口USART1
#define  DEBUG_USARTx                   USART1
#define  DEBUG_USART_CLK                RCC_APB2Periph_USART1
#define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd
#define  DEBUG_USART_BAUDRATE           115200


// USART GPIO 引脚宏定义
#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
    
#define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9
#define  DEBUG_USART_RX_GPIO_PORT       GPIOA
#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10

#define  DEBUG_USART_IRQ                USART1_IRQn
#define  DEBUG_USART_IRQHandler         USART1_IRQHandler


// 函数
void USART_Config(void);
void Usart_SendByte(USART_TypeDef * pUSARTx, uint8_t ch);
void Usart_SendString(USART_TypeDef * pUSARTx, char *str);
void delay_ms(uint16_t delay_ms);
	
#endif /*__BSP_USART_H__*/

bsp_usart.c代码:


#include "bsp_usart.h"


/**************************************************
		配置嵌套向量中断控制器NVIC
**************************************************/
static void NVIC_Configuration(void)
{
   
  NVIC_InitTypeDef NVIC_InitStructure;
  
  // 嵌套向量中断控制器组选择
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  // 配置USART为中断源
  NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
  // 抢断优先级
  NVIC_
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值