USART——串口通讯

开发平台

  • 野火F429开发板
  • 标准库

通讯基本概念

  • 同步通讯和异步通讯
    同步通讯和异步通讯的区别在于有没有时钟信号线
  • 全双工、半双工、单工通讯
    全双工可以收发同时进行
    半双工可以收发但不可同时进行
    单工只能收或发

USART

  • 三大时序:USART、I2C、SPI,USART是其中之一了
  • USART时序:起始位为低电平、然后发送数据8位数据是没有校验位的,9位数据是有校验位的、停止位为高电平。时序如下图:(字长为8)
    在这里插入图片描述

现在我使用串口一般都是打印调试信息或者蓝牙通讯 ,只会用到TX和RX,不需要用到时钟信号线,所以是异步半双工
如果想要操作寄存器,那就要看功能框图了
在这里插入图片描述
1.TX发送数据引脚、RX接受数据引脚,所以要把引脚配置为串口复用引脚(每个串口对应的引脚都不一样,这样查看手册)
2.发送数据寄存器和接收数据寄存器,还有发送移位寄存器和接受移位寄存器
发送数据时,发送寄存器将数据一位位的移向移位寄存器发送出去
接收数据时,将数据接收到移位寄存器然后再移向接收寄存器
3.控制寄存器CR1:要使能USART、设置数据位(字长)、是否开启校验位、奇校验还是偶校验、作为发送器还是作为接收器(使能)
在这里插入图片描述
4.波特率设置,直接操作寄存器的时候要自己算出数值,然后写入寄存器,如果用标准库就不需要计算了,已经算好了。公式如下:
OVER8:过采样模式,根据选择的模式去更改权位(计算小数的时候)
在这里插入图片描述
使用标准库的话上面的了解一下就好了

  • 串口的四个参数:波特率、数据位、校验位、停止位。
  • 波特率:每秒中传输了多少个码元
  • 数据位:八位或者九位,八位是没有校验位九位是有校验位
  • 使能了校验位之后每个字符的数据帧格式:启动位+数据位+校验位+停止位
    没有使能校验位每个字符的数据帧格式:启动位+数据位+停止位
  • 停止位:表示数据已经发送完成了,停止位长传输准确率高,效率低 停止位分为0.5位、1位、1.5位、2位
    0.5位和1.5位用在智能卡模式,一般情况下用1位停止位,2位停止位一般用于USART模式、单线模式、调制解调器模式。
  • 一般情况:波特率:115200、数据位:8位、无校验位、停止位:1位
    要想实现通讯,发送设备和接受设备波特率、数据位、校验位、停止位必须相同才可实现通讯
    1.初始化串口的引脚
    2.配置串口的参数
    3.编写发送字符串函数
    4.重定向printf函数和scanf函数
    什么是重定向?简单来说,你喝水要喝进肚子里,可是你喝的时候是喝进脑子里的,你必须重定向才能让水喝进肚子里。

代码如下:

#ifndef __USART__H
#define __USART__H

#include "main.h"

#define USART_TX_CLOCK                  RCC_AHB1Periph_GPIOA
#define USART_RX_CLOCK                  RCC_AHB1Periph_GPIOA
#define USART_TX_PORT                   GPIOA
#define USART_RX_PORT                   GPIOA
#define USART_TX_PINSOURCE              GPIO_PinSource9            
#define USART_RX_PINSOURCE              GPIO_PinSource10           
#define USART_AF                         GPIO_AF_USART1
#define USART_TX_PIN                    GPIO_Pin_9
#define USART_RX_PIN                    GPIO_Pin_10

#define USART_CLOCK_Cmd()               RCC_APB2PeriphClockCmd(USART_CLOCK,ENABLE)
#define USART_CLOCK                     RCC_APB2Periph_USART1
#define USART                           USART1  
#define BAUDRATE                        115200                 

void USART_GPIO_Config(void);
void USART_Config(void);
void USATR_Sendbyte(uint16_t data);
void USART_Sendstring(char *string);
int fputc(int ch, FILE *f);


#endif
#include "usart.h"

void USART_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    /*开USART引脚复用时钟*/
    RCC_AHB1PeriphClockCmd(USART_TX_CLOCK|
                           USART_RX_CLOCK,ENABLE);
    /*
    **复用模式
    **不上拉不下拉
    **TX->PB6    RX->PB7
    */
    GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
    GPIO_InitStruct.GPIO_Speed=GPIO_High_Speed;

    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Pin=USART_TX_PIN;
    GPIO_Init(USART_TX_PORT,&GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Pin=USART_RX_PIN;
    GPIO_Init(USART_RX_PORT,&GPIO_InitStruct);
    /*设置复用功能*/
    GPIO_PinAFConfig(USART_TX_PORT,USART_TX_PINSOURCE,USART_AF);
    GPIO_PinAFConfig(USART_RX_PORT,USART_RX_PINSOURCE,USART_AF);
}

void USART_Config(void)
{
    USART_InitTypeDef USART_InitStruct;
    /*引脚配置*/
    USART_GPIO_Config();
    /*开串口时钟*/
    USART_CLOCK_Cmd();
    /*
    **波特率115200
    **发送和接收模式
    **无校验位
    **停止位为1
    **8位数据位
    **不使用硬件流
    */
    USART_InitStruct.USART_BaudRate=BAUDRATE;
    USART_InitStruct.USART_Parity=USART_Parity_No;
    USART_InitStruct.USART_StopBits=USART_StopBits_1;
    USART_InitStruct.USART_WordLength=USART_WordLength_8b;
    USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
    USART_Init(USART,&USART_InitStruct);
    /*使能串口*/
    USART_Cmd(USART,ENABLE);
}

void USATR_Sendbyte(uint16_t data)
{
    USART_SendData(USART,data);
    while(USART_GetFlagStatus(USART,USART_FLAG_TXE)==RESET);
}

void USART_Sendstring(char *string)
{
    unsigned int i=0;
    do
    {
        USATR_Sendbyte(*(string+i));
        i++;
    } while (*(string+i)!='\0');

    while(USART_GetFlagStatus(USART,USART_FLAG_TC)==RESET);
}


///重定向c库函数printf到串口,重定向后可使用printf函数

int fputc(int data, FILE *f)
{
		/* 发送一个字节数据到串口 */
		USART_SendData(USART,(uint8_t) data);
		
		/* 等待发送完毕 */
		while (USART_GetFlagStatus(USART, USART_FLAG_TXE) == RESET);		
	
		return (data);
}

int fgetc(FILE *f)
{
    /*等待接受完毕*/
    while(USART_GetFlagStatus(USART,USART_FLAG_RXNE)==RESET);

    return (USART_ReceiveData(USART));
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Hass机台串口通讯采集资料,指的是利用串口通信技术从Hass机台上获取数据。Hass机台是一种自动化机械设备,通过串口通信可以实现与其他设备的数据交互和信息传输。 串口通信是一种广泛应用于数据传输的技术,可实现的数据采集方式有很多种,以下是其中的一种方法: 首先,需要连接Hass机台和计算机或其他数据采集设备的串口,通常是通过串行端口转USB接口的转换器来实现。 然后,通过在计算机上编写相应的软件程序,通过串口通信协议与Hass机台进行通信。这些通信协议可以是标准的串口通信协议,也可以是厂家提供的特定协议。 在程序中,可以设置串口参数,如波特率、数据、校验等,以确保通信的正确性和稳定性。 接下来,可以使用串口通信指令,发送命令给Hass机台,以获取需要的数据。这些命令可以包括获取设备状态、获取传感器数据、控制机台运动等操作。 Hass机台在收到命令后,会根据命令执行相应的操作,并将结果通过串口返回给计算机或数据采集设备。 最后,通过解析串口返回的数据,可以得到所需的采集资料,可以进行进一步的数据处理、分析和存储。 总之,Hass机台串口通讯采集资料是一种利用串口通信技术从Hass机台上获取数据的方法,通过正确的串口连接和通信协议,以及编写相应的软件程序,可以实现对Hass机台的数据采集和控制。 ### 回答2: HASS机台串口通讯是一种用于采集资料的技术。HASS是高级自动测试系统的缩写,是一种用于测试电子产品的自动化测试系统。在HASS机台中,串口通讯是一种常用的方式来连接机台与外部设备,以实现数据的传输和控制。 串口通讯是一种基于串行传输的通信方式,可以通过串口连接来和外部设备进行数据的交互。在HASS机台上,利用串口通讯可以方便地采集和传输各种数据,包括温度、湿度、电流、电压等等。通过串口通讯,机台可以与外部设备如计算机、传感器、数据采集卡等实现实时数据的交互,从而方便地获取各种测试数据。 在进行HASS机台串口通讯采集资料的过程中,需要使用相应的串口通讯协议和通讯接口,如RS-232、RS-485等。通过配置合适的串口参数,可以与外部设备建立稳定的通信连接。一旦建立连接,就可以通过发送指令和接收数据来实现数据的采集。同时,通过对采集到的数据进行解析和处理,可以进行更进一步的数据分析和应用。 值得注意的是,在HASS机台串口通讯采集资料的过程中,需要合理设计和配置串口通讯的时序、波特率等参数,以确保稳定的数据传输和准确的数据采集。此外,还需要保证机台与外部设备之间的物理连接正常,以避免通讯中断或数据丢失。 总之,HASS机台串口通讯采集资料是一种便捷且常用的数据采集方式,通过合理配置和利用串口通讯,可以方便地获取并应用各种测试数据,从而提高测试效率和质量。 ### 回答3: HASS机台串口通讯采集数据是指在HASS机台与外部设备之间通过串口进行通信,以获取相关数据的过程。 串口通信是一种常见的通信方式,它通过发送和接收数据来实现设备之间的信息传递。HASS机台可以通过串口与其他设备连接,例如计算机、传感器等,以实现数据的采集和交互。 在HASS机台串口通讯采集资料的过程中,首先需要确保HASS机台和外部设备之间的串口连接是正常的。可以通过检查串口线的连接状态、端口设置等来进行确认。 其次,需要编写相应的程序或脚本来实现数据的采集和处理。这可能涉及到串口通信的协议、数据格式的解析以及数据的存储等操作。可以使用相关的编程语言或软件工具来完成这些任务。 一旦程序编写完成,就可以开始采集数据。通过串口通信,HASS机台可以与外部设备之间进行数据发送和接收。可以根据需要进行周期性的数据采集,也可以根据外部设备的触发来主动进行数据的采集。 最后,采集到的数据可以进行进一步的处理和分析。可以将数据存储到数据库中,绘制图表进行可视化展示,或者进行其他的数据分析和应用。 总之,HASS机台串口通讯采集资料是一种通过串口通信进行数据交互和采集的过程,需要正确连接串口,编写程序实现数据的采集和处理,并进行数据的存储和应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值