这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » “分享评测,赢取加热台”+串口芯片资料分享

共3条 1/1 1 跳转至

“分享评测,赢取加热台”+串口芯片资料分享

工程师
2024-03-25 20:33:31   被打赏 50 分(兑奖)     打赏

串口芯片在硬件通信中扮演着至关重要的角色,尤其在计算机与外部设备的数据传输中。下面将围绕串

口芯片的硬件、软件以及相关的原理图进行分享。为什么今天我会发这个贴子,因为在软件调试中,除了用灯可以DUG用的最多的,我想还有串口,所以今天我就分享这个贴子。

下面我来讲一下相关的理论知识。

硬件方面

串口芯片通常指的是UART(通用异步收发传输器)芯片,它是串口通信的核心部件。UART芯片的主要功能是将计算机的并行数据转换为串行数据,以实现与外部设备之间的通信。这种转换是通过UART芯片内部的数据缓冲区、波特率发生器、数据格式控制器等功能模块实现的。UART芯片还支持多种波特率,常见的如9600、19200、115200等,以满足不同通信速率的需求。

在硬件接口上,UART芯片通常使用TX(发送)和RX(接收)两根线进行数据的传输,同时还需要一根地线作为参考。这些线连接到外部设备,GPS模块、蓝牙模块等,实现数据的交换。

市场上有多种常用的串口芯片,如FTDI公司的FT232系列、Silicon Laboratories公司的CP2102、北京朝晖公司的CH340以及Prolific Technology公司的PL2303等。这些芯片都具有较高的性能和稳定性,广泛应用于各种串口通信场景。我这里用沁恒的CH340G,像那些什么进口的,我不想用。哈哈

软件方面

在软件层面,串口通信主要依赖于驱动程序和串口调试工具。驱动程序是串口芯片与操作系统之间的桥梁,它使得操作系统能够识别并管理串口芯片。常见的串口芯片厂商都会提供相应的驱动程序,支持Windows、Linux、MAC OS等多种操作系统,那当然了,我这里肯定是在Windows哦,因为兼容性还是比较好,也很通用的。

串口调试工具则是用于测试、调试串口通信的软件。这类工具通常支持串口数据的采集、发送和接收,以及数据的格式化显示。此外,一些高级的串口调试工具还提供了数据管理功能,如数据导出至Excel报表或存储于数据库等。

原理图方面

串口通信的原理图主要包括UART芯片、电平转换电路、电流限制电路以及数据传输控制线路等部分。UART芯片作为核心部件,负责数据的转换和传输。电平转换电路则用于适配不同设备之间的电平差异,确保数据的准确传输。电流限制电路则用于保护电路免受过大电流的损害。数据传输控制线路则负责控制数据的传输方向和速率。

通过这些部件的协同工作,串口通信得以实现计算机与外部设备之间的可靠数据传输。

下面上传图纸:

原理图:

image.png

PCB图:

image.png再上个3D图:

image.png

焊接过程图:

查看一下TPYE C有没有焊接好:

eb4d781152969ffaaf1384d11e2cac0.jpg芯片焊接好后的图:

e5a9f4be955d5956ceb41aa95c12e40.jpg

使用STM32F103与CH340G进行串口通信的代码示例通常涉及几个关键步骤:初始化USART(通用同步异步收发器),配置GPIO(通用输入输出),以及可能的DMA(直接内存访问)或中断配置。以下是一个简化的示例,展示了如何配置STM32F103的USART1与CH340G进行基本的串口通信。

代码:

#include "stm32f10x.h"  
  
#define USARTx USART1               // 假设使用USART1  
#define USARTx_TX_PIN GPIO_Pin_9   // USART1_TX -> PA9  
#define USARTx_RX_PIN GPIO_Pin_10  // USART1_RX -> PA10  
#define USARTx_GPIO_PORT GPIOA     // USART1在GPIOA上  
#define USARTx_BAUDRATE 9600       // 波特率设置为9600  
  
void USART_Config(void);

串口配置:
void USART_Config(void)  
{  
    GPIO_InitTypeDef GPIO_InitStructure;  
    USART_InitTypeDef USART_InitStructure;  
  
    // 使能GPIOA和USART1时钟  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);  
  
    // USART1 TX -> PA9  
    GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
    GPIO_Init(USARTx_GPIO_PORT, &GPIO_InitStructure);  
  
    // USART1 RX -> PA10  
    GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
    GPIO_Init(USARTx_GPIO_PORT, &GPIO_InitStructure);  
  
    // USART1配置  
    USART_InitStructure.USART_BaudRate = USARTx_BAUDRATE;  
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  
    USART_InitStructure.USART_Parity = USART_Parity_No;  
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
    USART_Init(USARTx, &USART_InitStructure);  
  
    // 使能USART1接收中断  
    USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);  
  
    // 使能USART1  
    USART_Cmd(USARTx, ENABLE);  
}
串口接收:
void USART1_IRQHandler(void)  
{  
    if(USART_GetITStatus(USARTx, USART_IT_RXNE) != RESET)  
    {  
        // 读取接收到的数据  
        uint8_t data = USART_ReceiveData(USARTx);  
        // 在这里处理接收到的数据,比如打印到调试控制台  
        // ...  
    }  
}

int main(void)  
{  
    // 初始化系统时钟等  
    // ...  
  
    // 配置USART  
    USART_Config();  
  
    while(1)  
    {  
        // 主循环,这里可以添加发送数据的代码  
        // ...  
    }  
}


焊接好的正图:

image.png

向串口发送接收输出结果:

f8b3210e8b7cffda37f234ed3aa75ee.png


助工
2024-04-03 10:03:58     打赏
2楼

感谢分享


专家
2024-05-16 08:21:11     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]