精华内容
下载资源
问答
  • STM32CubeMX的高速USB通信模块设计
  • STM32CubeMX的高速USB通信模块设计.pdf
  • 基于STM32的高速USB通信模块设计与实现
  • 基于STM32的高速USB通信模块设计与实现.pdf
  • 基于FPGA的USB通信模块在伺服系统中的应用研究.pdf
  • 行业资料-电子功用-一种电子设备及其USB通信模块的控制方法
  • 基于PDIUSBD12芯片的USB通信模块原理设计 USB是通用串行总线接口,具有速度快、即插即用、接口灵活、独立供电等显著优点。本文讨论USB接口开发技术,采用了Philips公司的PDIUSBD12作为USB接口芯片,进行了USB通信模块的...
  • 基于VHDL的cy7c68013的USB通信模块,使用slave fifo同步模式
  • 今天有空,开贴讲讲,怎样配合ST 提供的库函数理解STM32F103 的USB模块,以及怎么调用这些库函数来实现基本的USB通信。题目很大,先只讲讲最简单的应用。 1 关于512字节的Packet Buffer 在STM32F103的USB模块中有一...

    今天有空,开贴讲讲,怎样配合ST 提供的库函数理解STM32F103 的USB模块,以及怎么调用这些库函数来实现基本的USB通信。题目很大,先只讲讲最简单的应用。

    1 关于512字节的Packet Buffer

    在STM32F103的USB模块中有一个RAM 区,称为Packet Buffer,共有512字节。
    在这里插入图片描述
    USB模块中有个Buffer Description Table,这个Table位于512字节的Packet Buffer中,可以在Packet Buffer 的任意位置。

    USB模块提供一个寄存器USB_BTABLE来设置Buffer Description Table在PacketBuffer 的偏移地址。

    在库函数中,Define 了这个偏移地址:
    usb_conf.h:#define BTABLE_ADDRESS (0x00)
    这意味着Buffer Description Table 位于Packet Buffer 的首地址。
    在这里插入图片描述
    在Buffer Description Table 中的,是所用到的端点的缓存区地址寄存器和缓存区长度寄存器。所有用到的端点的这两个寄存器都位于这个Table 中。

    如上所说,由于这个Table 位于Packet Buffer 的首地址。所以端点0 的发送缓冲区地址寄存器就位于Packet Buffer 的首地址,紧接的是端点0 发送缓冲区长度寄存器,接着的是端点0接收缓存区的地址寄存器,跟着是端点0 的接收缓存区的长度寄存器,等等等等,一直到最后一个端点8 的接收缓存区的长度寄存器。

    每个端点的一个方向有2 个寄存器,共8 个端点16 个方向,一共32 个寄存器,每个寄存器为4 个字节,所以这个Table 一共占有128 字节。

    在这里插入图片描述
    在端点0 发送缓存区的地址寄存器中的值,是端点0 发送缓存区在Packet Buffer 中的偏移地址。而端点0 接收缓存区的地址寄存器中的值,是端点0 接收缓存区在Packet Buffer 中的偏移地址。

    如前所说,Buffer Description Table 从理论上占有128 个字节。但对于具体的应用,不是每个应用都会用到8 个端点的16 个方向的。所以,对于那些没有用到的端点寄存器,我们可以不考虑为他们预留位置。

    在ST 提供的例程中,通常这么定义:
    #define BTABLE_ADDRESS (0x00)
    /* EP0 /
    /
    rx/tx buffer base address */
    #define ENDP0_RXADDR (0x18)
    #define ENDP0_TXADDR (0x58)
    这3 句定义,意味着:
    1, 端点0 的接收缓存区位于Packet Buffer 的0x18 地址。
    2, 端点0 的发送缓存区位于Packet Buffer 的0x58 地址。
    3, Buffer Description Table 位于Packet Buffer 的前24 字节。24 个字节意味着
    应用需要使用6 个寄存器,即3 个端点。
    4, 端点0 的接收缓存区长度为64 字节。

    在这里插入图片描述

    好了,关于这个Packet Buffer 讲解完毕。
    要做一个USB应用,第一步就是要根据应用合理的分配好这个Packet Buffer。

    2 使用STM32F102/103 USB函数库进行USB通信

    第一步:
    根据应用的需求,定义使用到的端点数量
    usb_conf.h
    #define EP_NUM (3)
    以上意味着应用需要使用到EP0,EP1 和EP2

    第二步:
    初始化每个使用到的端点

    usb_prop.c
    SetEPType(ENDP2, EP_INTERRUPT);
    定义端点2 为中断端点

    SetEPTxAddr(ENDP2, ENDP2_TXADDR);
    如果需要进行EP2 IN 通信,需要定义端点2 的发送缓存区的地址,也就是在Packet Buffer中的偏移地址

    SetEPRxAddr(ENDP2, ENDP2_RXADDR);
    如果需要进行EP2 OUT 通信,需要定义端点2 的接收缓存区在Packet Buffer 中的偏移地址

    SetEPRxStatus(ENDP2, EP_RX_NAK);
    设置端点2 的接收状态为NAK,设备将以NAK 来响应主机发起的所有OUT 通信。

    SetEPTxStatus(ENDP2, EP_TX_NAK);
    设置端点2 的发送状态为NAK,设备将以NAK 来响应主机发起的所有IN 通信。

    第三步:
    使能端点的通信对于IN 端点的使能:

    UserToPMABufferCopy(Send_Buffer, ENDP2_TXADDR, 8);
    拷贝用户数据到端点2 的发送缓存区

    SetEPTxCount(ENDP2, 8);
    设置端点2 发送数据长度

    SetEPTxValid(ENDP2);
    设置端点2 的发送状态为VALID

    以上三句可以在应用代码的任意位置调用,一旦调用,即使能了一次USB IN通信。

    USB设备将在收到主机的IN TOKEN 后,自动发送缓存区中的数据到主机,并在发送完毕后产生EP2_IN_Callback 中断,同时将端点2 的发送状态自动改为NAK。
    如果需要再次进行数据传送,需要再次调用以上的三句函数。对于OUT 端点的使能:

    SetEPRxValid(ENDP2);
    设置端点2 的接收状态为VALID。
    以上的这句函数即使能了端点2 的OUT 通信,可以在任意位置调用。

    一旦调用,即使能了一次OUT 通信。USB设备将以ACK来响应主机随后的OUT 通信,并在接收数据完毕后,产生EP2_OUT_Callback 中断,同时自动将端点的接收状态改为NAK。

    在EP2_OUT_Callback 中断函数中调用
    USB_SIL_Read(EP2_OUT, Receive_Buffer);

    可以将端点2 接收缓存区中收到的数据拷贝到用户数据区。

    详细资料下载见一下链接:

    展开全文
  • 本文介绍的是DSP与蓝牙模块USB通信模块设计
  • 1 引 言 USB ,是英文Universal Serial BUS(通用串行总线)的缩写,而其中文简称为“通串线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热...
  • USB默认松与果HID通信协议。 、UART:切换成博雅串口通信模式 USB:切换成松与果HID通信协议: UART:切换成二代证SAM模块通信模式:
  • 针对 CAN 总线现场数据采集时必须有 PC 机参与和 CAN 总线与 PC 机通讯速率低的问题, 提出了此 CAN- USB 通信模块设 计方案; 该方案基于 USB 主/ 从控制芯片 CH375A, 在单片机的控制下, 既可以实现 CAN 总线数据采集...
  • 模块描述:1、CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps;2、软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小3、...
  • STM32CubeMX的全速USB通信及测速模块设计.pdf
  • USB是一个使计算机周边设备连接标准化、单一化的接口,其规格是由Intel(英特尔)、NEC、Compaq、DEC、IBM(商业机器公司)、Microsoft(微软)、Northern Telecom联系制定的。 USB ,是英文Universal Serial BUS...
  •  USB通信固件设计的目标为使PDIUSBD12在USB上达到最大的传输速率。  1.总体规划  CPU忙于处理许多设备控制和数据处理等任务。通信固件设计成完全的中断驱动方式,当CPU处理前台任务 时,USB的传输可在后台进行...
  • JZ864A微功率USB通信无线数传模块说明书PDF,JZ864A微功率USB通信无线数传模块说明书
  • 模块选用USB接口芯片为Philips公司生产的PDIUSBD 12芯片,由于设计的需要,下面对该芯片进行简单 的描述。  PDIUSBD 12是一款性价比很高的USB器件,它通常用作微控制器系统中实现与微控制器进行通信的高速通 用...
  • USB(Universal Serial Bus),即通用串行总线,是近年来发展起来的一种新型接口技术,它具有许多其他总线无法比拟的优点。  · 在USB方式下,所有的外设都... 该模块利用芯片PDIUSBDl2与PlC16F877接口组成USB通信
  • USB转串口通信模块简要说明: 一、尺寸:全长mm42宽20mm高10mm 二、主芯片:CP2102 三、工作电压:USB供电 USB转串口通信模块实物展示: USB转串口通信模块电路特点: 1、具有电源指示. 2、输入口直接接电脑USB口。 3、...
  • 本文通过介绍Linux中支持USB的各种模块和库,分析了在Linux上利用USB实现高速串口和以太网连接等通信方式的具体方法。  通用串行总线(USB,Universal Serial Bus)是一种非常实用的通信接口,其应用日益广泛。有三...
  • HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了。为什么呢? 因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你...

    HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了。为什么呢?

    因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。

    但是就是这么一个很常见的模块,网上很多的博客写的都是错的,或者都是很不详细的。

    所以本文就介绍一下这款蓝牙通信模块的使用,包括蓝牙模块的调试、手机与蓝牙模块之间的传输、手机蓝牙控制STM32单片机,应该是逐渐深入的一个过程。但是这仅仅是使用,以后有时间应该会对蓝牙有一个稍微深度的学习,而不能仅仅是浮于表面,只会用。

     

    模块名称:HC-05蓝牙串口通信模块

    参考资料:HC-05蓝牙串口通信模块官方资料包

    知识储备:【STM32】串口通信基本原理(超基础、详细版)

    其他模块:USB转TTL模块、手机蓝牙串口助手app

    手机蓝牙串口助手软件,可以点击链接下载:蓝牙串口。因为这是我见过所有手机端界面最好看的了,其他的界面都有点太糟糕了。

     

    蓝牙模块的调试

    准备工作

    USB转TTL模块与HC-05蓝牙模块的接线:

    两模块共地,两模块共VCC(VCC取5V);蓝牙模块的RX接转换模块的TX,蓝牙模块的TX接转换模块的RX。如下图所示:

    这个时候就要将转换模块连接到电脑上,然后利用串口调试助手进行蓝牙模块的调试。

    附可能会用到的驱动:链接:https://pan.baidu.com/s/1bpYLfCr 密码:yabv

    蓝牙模块的调试

    HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式。在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。

    • 当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;
    • 当模块处于命令响应工作模式时能执行AT命令,用户可向模块发送各种AT 指令,为模块设定控制参数或发布控制命令。

    怎么进入命令响应工作模式?

    进入命令响应工作模式有两种方法:

    • 模块上电,未配对情况下就是AT模式,波特率为模块本身的波特率,默认:9600,发送一次AT指令时需要置高一次PIO11;
    • PIO11 置高电平后,再给模块上电,此时模块进入AT 模式,波特率固定为:38400,可以直接发送AT指令。

    什么叫做置高一次PIO11?

    在蓝牙模块中有一个小按键,按一下就置高一次PIO11。也就是说,第一种方法需要每发送一次AT指令按一次;而第二种方式是长按的过程中上电,之后就无需再管了,直接发送AT命令即可。

    需要注意一下,两种进入命令响应工作模式的方式使用的波特率是不一样的,建议使用第二种方式。

    怎么区分进了命令响应工作模式呢?

    在蓝牙模块上有灯,当灯快闪的时候,就是自动连接工作模式;当灯慢闪的时候,就是命令响应工作模式。

    AT命令

    进入到命令响应工作模式之后,就可以使用串口调试助手进行蓝牙调试了。

    首先有一点,AT指令不区分大小写,均以回车、换行结尾。下面介绍常用的AT指令:

    常用AT指令
    指令名响应含义
    ATOK测试指令
    AT+RESETOK模块复位
    AT+VERSION?+VERSION:<Param> OK获得软件版本号
    AT+ORGLOK恢复默认状态
    AT+ADDR?+ADDR:<Param> OK获得蓝牙模块地址
    AT+NAME=<Param>OK设置设备名称
    AT+NAME?+NAME:<Param> OK获得设备名称
    AT+PSWD=<Param>OK设置模块密码
    AT+PSWD?+PSWD:<Param> OK获得模块密码
    AT+UART=<Param1>,<Param2>,<Param3>OK设置串口参数
    AT+UART?+UART:<Param1>,<Param2>,<Param3> OK获得串口参数

    对于AT指令,有几点注意:

    • AT+NAME?:获得设备名称,这个AT指令有很大可能性是没有返回的,因为我也看到了很多的例子……,但是其他的指令都是没有问题的,直接设置设备名称就行了;
    • AT+UART?:获得串口参数,串口的参数一共有三个,波特率、停止位、检验位。其取值如下:
    串口参数
    参数名称取值
    波特率

    2400、4800、9600、19200、38400、5760、

    115200、230400、460800、921600、1382400

    停止位

    0:1位

    1:2位

    校验位0:NONE  1:Odd  2:Even

    其默认值为:9600,0,0。

    例子:

    本文中,蓝牙串口的波特率设置成115200。之后的内容,就会采用这个波特率来进行通讯了。

     

    手机与蓝牙模块之间的传输

    直接将蓝牙模块与转换模块连接,再讲其连接到电脑上,蓝牙模块直接进入自动连接工作模式。

    此时手机打开蓝牙串口调试应用,用其来连接蓝牙模块。手机蓝牙串口助手软件,可以点击链接下载:蓝牙串口。万分推荐这款,因为界面脱离了那种黑不溜秋的感觉,比较简洁、清爽。

    这个软件的使用:点击界面右下角蓝牙的标志,选择蓝牙进行连接。

    然后在电脑上的调试助手和手机的蓝牙串口调试应用之间就可以相互传输了,比如:

    可以清楚的看到:电脑向手机发送了“hello you”,手机向电脑发送了“hello world”。

     

    手机蓝牙控制STM32单片机

    之前的两个例子都是相比较而言比较简单的,这个例子将会涉及到程序的内容了。

    实现功能:手机通过蓝牙,向STM32单片机发送消息,STM32接收到消息之后原封不动的返回给手机。当然如果掌握了这个例子,也可以修改成,手机发送特定的消息,然后,STM32单片机做出相对应的动作。比如:点亮LED等、发动电机等等。

    连接说明

    使用USART1进行试验,也就是说STM32选取PA9、PA10来和HC-05进行连接。同时手机通过蓝牙来和HC-05进行连接。

    原理就是:手机通过蓝牙传输到HC-05上,再通过串口通信和STM32通信;而之前一般都是电脑上通过USB线转串口的方式,通过串口和STM32通信。本质上没有区别的。

    这个时候就应该更加深刻地体会到了本文开篇的一句话:说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。蓝牙的相关一切都被封装起来了,都不需要接触到。

    STM32控制程序

    #include "stm32f10x.h"
    
     void My_USART1_Init(void)  
    {  
        GPIO_InitTypeDef GPIO_InitStrue;  
        USART_InitTypeDef USART_InitStrue;  
        NVIC_InitTypeDef NVIC_InitStrue;  
          
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口端口使能  
          
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;  
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;  
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
        GPIO_Init(GPIOA,&GPIO_InitStrue);  
          
        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;  
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;  
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
        GPIO_Init(GPIOA,&GPIO_InitStrue);  
          
        USART_InitStrue.USART_BaudRate=115200;  
        USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  
        USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;  
        USART_InitStrue.USART_Parity=USART_Parity_No;  
        USART_InitStrue.USART_StopBits=USART_StopBits_1;  
        USART_InitStrue.USART_WordLength=USART_WordLength_8b;  
          
        USART_Init(USART1,&USART_InitStrue);
          
        USART_Cmd(USART1,ENABLE);//使能串口1  
          
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断  
          
        NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;  
        NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;  
        NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;  
        NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  
        NVIC_Init(&NVIC_InitStrue);  
          
    }  
      
    void USART1_IRQHandler(void)  
    {  
        u8 res;  
         if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)  
     {  
         res= USART_ReceiveData(USART1); 	 
         USART_SendData(USART1,res);     
      }  
    }  
       
     int main(void)  
     {    
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
        My_USART1_Init();  
         while(1);  
           
     } 

    这段程序和【STM32】串口相关配置寄存器、库函数(UART一般步骤)中的程序一模一样,几乎没有什么改动。

    区别就是,在UART实验中,USART1是和USB转串口模块连接在一起的,然后与电脑上的串口调试助手进行通信;现在改成USART1是和蓝牙模块连接在一起的,然后和手机上的蓝牙串口调试助手进行通信。

     

    展开全文
  • 易语言USB操作模块

    2012-12-15 16:53:22
    模块可以操作USB的一些相关操作,便于制作一些类似于加密狗这类的程序!
  • 这样一款可以插到电脑上的USB无线模块,用于调试NRF24L01的通信非常方便。可以用在无线收发数据方面,作为接收端或者发送端,用在物联网等方面。 实现的功能 1.可以作为电脑端的无线数据接收器或者发送器。 2.板子用...
  • 使用stm32F4的usb驱动4G模块,实现了通过USB虚拟出的串口,通过AT命令控制4G模块
  • 存在两个通信端口,USB(虚拟COM端口)和侧面USART端口,外接引脚并且与Raspberry Pi兼容。该USB转CAN适配器可以与PC或您的定制嵌入式设备配合工作。 该USB转CAN适配器支持多种功能,如: CAN 2.0版支持 接收和发送...
  • 基于USB通信的实验系统设计与实现 USb通信的过程,设计方案。
  • 蓝牙模块HC-08手册,内部有蓝牙模块的AT指令配置手册,可以实现一对多收发操作,并且有详细的配置和使用讲解,最后还附有蓝牙模块的原理图。
  • CH340C设计USB转TLL串口通信模块(原理图+PCB)PADS 9.5版本 模块描述: 1、CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps; 2、软件兼容CH341驱动,过流保护,引出相应的通讯接口与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,672
精华内容 11,468
关键字:

usb通信模块