STM32学习笔记——串口

参考海创电子STM32视频。

一、串口相关理论知识

1.USART与UART

UART (universal asynchronous receiver and transmitter):通用异步收发器
UART:一般只能用于异步串行通讯。

USART(universal synchronous asynchronous receiver and transmitter):通用同步和异步收发器
USART:既可以用于同步串行通讯,也能用于异步串行通讯。 

2.通信方式 

串口通信

传输原理:数据按位顺序传输。

优点:占用引脚资源少,传送距离长,抗干扰能力强。

缺点:速度相对较慢。

因此串口通信的应用较为广泛。

并行通信

原理:数据各个位同时传输。

优点:速度快。

缺点:占用引脚资源多,传送距离短。

3.传送模式 

 串口通信有三种传送模式:单工模式半双工模式全双工模式

  • 单工模式是指在通信双方中,一方只负责发送,另一方只负责接收。例如广播,喇叭只负责接受信号进行广播,不能发信号给设备另一端。
  • 半双工模式是指在通信双方中,一方在发送数据的过程中不能接受另一方传过来的数据,另一方在接受数据的过程中不能发送数据。例如常用的对讲机,在一方讲的过程中另一方只能听,只能等一方讲完了才能让另一方讲。
  • 全工模式是指在通信双方中,双方可以同时传送数据,比如人手一个的手机,可以边听边讲。

4.同步与异步 

同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

二、串口通信功能的实现 

 1.编写流程

  1. 串口时钟、GPIO时钟使能        RCC_APB2PeriphClockCmd();
  2. GPIO端口模式设置                   GPIO_Init();
  3. 串口参数初始化                        USART_Init();
  4. 开启中断并且初始化NVIC        NVIC_Init();USART_ITConfig();
  5. 使能串口                                   USART_Cmd();
  6. 编写中断处理函数                    USARTX_IRQHandler();

串口数据收发:

void USART_SendData();
uint16_t USART_ReceiveData();

串口传输状态: 

FlagStatus USART_GetFlagStatus(USART_TypeDef*USARTx, uint16_t USART_FLAG); 
void USART_ClearFlag(USART_TypeDef*USARTx,uint16_t USART_FLAG);
ITStatus USART_GetITStatus(USART_TypeDef*USARTx, uint16_t USART IT); 
void USART_ClearITPendingBit(USART_TypeDef*USARTx, uint16_t USART_IT);

三、串口简单通信实验

usart1.h 

#ifndef __MY_USART1_H
#define __MY_USART1_H
#include "stm32f10x.h"


#define USART1_GPIO_PIN_TX	GPIO_Pin_9
#define USART1_GPIO_PIN_RX	GPIO_Pin_10

void My_usart1(void);

#endif

usart1.c

/******************
1、串口时钟、GPIO时钟使能
2、GPIO端口模式设置
3、串口参数初始化
4、开启中断并且初始化NVIC
5、使能串口
6、编写中断处理函数
******************/

 #include "sys.h"//包含需要的头文件

void My_usart1(void)
{
	//定义结构体变量
	GPIO_InitTypeDef GPIO_InitStruct;
	USART_InitTypeDef USART1_InitStruct;
	
	//1、串口时钟、GPIOA时钟使能
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
	
	//2、GPIO端口模式设置
	GPIO_InitStruct.GPIO_Pin = USART1_GPIO_PIN_TX;//PA9
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用输出
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = USART1_GPIO_PIN_TX;//PA10
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    //GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//3、串口参数初始化
	USART1_InitStruct.USART_BaudRate = 9600;
	USART1_InitStruct.USART_HardwareFlowControl =USART_HardwareFlowControl_None;
	USART1_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
	USART1_InitStruct.USART_Parity = USART_Parity_No;
	USART1_InitStruct.USART_StopBits = USART_StopBits_1;
	USART1_InitStruct.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1, &USART1_InitStruct);
	
	//4、开启中断并且初始化NVIC
	
	
	//5、使能串口
	USART_Cmd(USART1,ENABLE);
	
	//6、编写中断处理函数
}

 main.c

#include "stm32f10x.h"                  // Device header
#include "my_usart1.h"

int main(void)
{

	My_usart1();
	USART_SendData(USART1,'H');
	
	while (1)
	{

	}
}

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值