嵌入式(3串口编程)

USARTx串口和管脚

串口比较

MCS51单片机C8051F41X系列单片机C8051F02X系列单片机ARM9 S3C2410STM32F103Cx单片机
有1个UART(通用异步接收和发送器)有1个通用异步串行发送接收端口UART0有2个通用异步串行发送接收端口UART0,UART1有3个UART(通用异步接收和发送器)有3个USART(通用同步/异步接收和发送器)

串行通信的分类

  • 同步串行通信:以数据块为单位进行传送
  • 异步串行通信:以字符为单位进行传送

串行通信的制式

串行通信的制式分三种:①单工(simplex)②半双工(half duplex)③全双工(full duplex)。若只有一根线用于数据通信,那只能是半双工;必须有二根线用于数据通信,才能实现全双工。

STM32F103Cx拥有的3个USART,它们都可以“全双工”通信

STM32单片机的USART串口:采用分数波特率发生器,串行发送、接收数据的最高速率=72M/16=4.5Mb/s。USART1接口通信速率可达4.5兆位/秒,其他接口的通信速率可达2.25兆位/秒。

波特率:是一个衡量通信速度的参数。如果数据不压缩,它表示每秒钟传送的位数,单位是bps。(在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数 称为 码元传输速率,简称波特率。其单位是波特)

PC机串口和单片机串口相连接

电平转换芯片:MAX232和MAX3232

MAX232MAX3232
供电5V5V或3.3V
功耗功耗较大,供电电压5V时,耗电5mA功耗较小,供电电压5V或3.3V时,耗电 0.3mA
外接电容4个1uF电容4个0.1uF电容
  • PC机 与 STM32单片机 的连接
    • 连线:要完成串口发送、接收,只需要TXD、RXD、GND三根线
    • 连接方法:两者的TXD和RXD交叉相连
    • 交叉方法:①通过串口(连接)线交叉,②在电路板上交叉(这时的串口(连接)线用直通线)

USARTx串口配置

USARTx串口定义

每个USART口共有7个设置寄存器

寄存器描述偏移地址复位值
USART_SR一个状态寄存器0x000x00C0
USART_DR一个数据寄存器,它是由两个寄存器组成的,一个给发送用(发送寄存器 TDR),一个给接收用(接收寄存器 RDR)0x04不确定
USART_BRR一个波特率寄存器0x080x0000
USART_CR1一个控制寄存器10x0C0x0000
USART_CR2一个控制寄存器20x100x0000
USART_CR3一个控制寄存器30x140x0000
USART_GTPR一个保护时间和预分频寄存器0x180x0000

USART_InitTypeDef

/*
USART_InitTypeDef   
结构体定义了串口参数,用于串口参数设置
在文件“stm32f10x_usart.h”中定义
*/
/* USART Init Structure definition */
typedef struct
{
  u32 USART_BaudRate;  // 用于设置USART传输的波特率
  u16 USART_WordLength;  // 用于设置一个帧中,传输或接收到的数据位数目
  u16 USART_StopBits;  // 用于设置所发送的数据的停止位数目
  u16 USART_Parity;  // 用于设置奇偶校验模式
  u16 USART_Mode;  // 用于使能或者失能串口发送和接收模式
  u16 USART_HardwareFlowControl;  // 用于使能或失能硬件流控制模式
} USART_InitTypeDef;

参数设置选择

USART_BaudRate

USART_WordLength

USART_WordLength描述
USART_WordLength_8b8位数据(默认)
USART_WordLength_9b9位数据

USART_StopBits

USART_StopBits描述
USART_StopBits_1在帧结尾传输1个停止位(默认)
USART_StopBits_0.5在帧结尾传输0.5个停止位
USART_StopBits_2在帧结尾传输2个停止位
USART_StopBits_1.5在帧结尾传输1.5个停止位

USART_Parity

USART_Parity描述
USART_Parity_No奇偶失能(默认)
USART_Parity_Even偶模式
USART_Parity_Odd奇模式

奇偶校验一旦使能,在发送数据的MSB位插入经计算的奇偶位(字长是9位时的第9位,字长是8位时的第8位)。

USART_HardwareFlowControl

USART_HardwareFlowControl描述
USART_HardwareFlowControl_None硬件流控制失能(默认)
USART_HardwareFlowControl_RTS发送请求RTS使能
USART_HardwareFlowControl_CTS清除发送CTS使能
USART_HardwareFlowControl_RTS_CTSRTS和CTS使能

USART_Mode

USART_Mode描述
USART_Mode_Tx发送使能
USART_Mode_Rx接收使能

USART_Init函数

USART_Init:根据USART_InitTypeDef中指定的参数,初始化外设USARTx串口

// 例如:初始化USART1串口
USART_Init(USART1, &USART_InitStructure);

USART_Cmd

USART_Cmd:使能USARTx外设 (或 失能USARTx外设),使能后,让外部管脚通过多路交叉开关与对应的USARTx相连。

USART_Cmd(USARTx, [ENABLE, DISABLE]);  // ENABLE使能  DISABLE失能

发送和接收数据

// 以发送一串字符为例,时钟使能和初始化自行设置
int main()
{
    u16 i;
    u8 a[] = "abcdef";
    for(i=0; a[i]!='\0'; i++)
    {
        USART_SendData(USARTx,a[i]); // 发送数据
        while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET); // 等待发送完成
    }
}

// 接收程序如下,以下程序只接收一个字节
int main()
{
    u8 i;
    while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==RESET); // 等待有数据发送来
    i = USART_ReceiveData(USARTx); // 数据发送来了保存在变量i中
}

脑图

有需要的自取



串口编程这一块还是比较简单的,如果有记录不完整或则错误的地方,欢迎反馈,我会积极汲取大家的宝贵建议。现在STM32编程的整体框架结构我心里已经有一条比较清晰的轮廓了,多编程,多实践就好了,大家一起加油↖(^ω^)↗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值