stm32usb做虚拟串口和键盘_在MINI STM32 板子上实现USB虚拟串口

回复: 101

e5a73b6a7586c690ae7a720f72a4e733.png

ccfb3c64a5000ccc1971125e1fdae7b2.png

20f7beba86b4a360a2108c8a34a4ebf3.png

在MINI STM32 板子上实现USB虚拟串口

电梯直达

ac34f29e61779188a50d361fdeae2c1f.png

4e3a061a6cee689711774664b8e32641.png

发表于 2011-6-27 06:51:45

|

只看该作者

8d1228179cec554492e4b5a60a447513.gif

|倒序浏览

|阅读模式

thread-4833268-1-1.html

(原文件名:A6.jpg)

实验内容:通过STM32的USB端口在PC上虚拟一个COM口,当虚拟成功后,可通过串口调试软件

发送控制命令,去点亮板子上相应的LED灯,同时输出调试信息。

工程文件:点击此处下载 ourdev_652561TEJV6B.zip(文件大小:909K) (原文件名:虚拟串口.zip)

在PC机的设备管理器中可看到虚拟出的COM口

thread-4833268-1-1.html

(原文件名:A14.JPG)

串口调试软件的输出状态

thread-4833268-1-1.html

(原文件名:虚拟串口.JPG)

通过这个实验,可以扩展更多的通过USB端口的应用。最主要是它简单跟上位机通讯,直接可以用串口

调试软件,或者超级终端。有兴趣的网友可以再继续研究下。

当前离线

精华汤圆中级会员

{*}

417ed852d27e8c159716eac4e3779f56.gif

43_avatar_middle.jpg

(303311828)

4e3a061a6cee689711774664b8e32641.png

发表于 2011-6-27 08:17:02

|

只看该作者

这个不错

STM32还没用过USB

积分

精华汤圆新手上路

{*}

417ed852d27e8c159716eac4e3779f56.gif

07_avatar_middle.jpg

(303196308)

4e3a061a6cee689711774664b8e32641.png

发表于 2011-6-28 16:22:22

|

只看该作者

楼主方便的话一起讨论关于USB虚拟串口的问题,已经纠结了一个星期了,问题是:怎么通过STM32103来产生一个CTS和DSR的信号给我们的PC上位机啊?急~~~~~~~~联系:414813968

3ed6c70162101cdc4cfc0ceaf175c8cd.png

楼主|

发表于 2011-6-28 19:20:43

|

只看该作者

我目前主要是通过USB的发送端和接收端,来交换数据的。在下位机没有涉及到串行通讯。这个实验之所以叫USB虚拟串口,只是上位机给用COM口的形式,通过USB这个硬件层,来收发数据的。

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-11 18:11:07

|

只看该作者

回复【楼主位】jiaxinhui

-----------------------------------------------------------------------

用你的例子改了一下。。但是我的下位机接不到上位机的数是怎么回事?!下位机给上位机发数可以收到。。。那个函数是接受上位机的数的函数哦?!

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-11 18:35:28

|

只看该作者

mark

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-11 18:45:14

|

只看该作者

要装驱动吗?

3ed6c70162101cdc4cfc0ceaf175c8cd.png

楼主|

发表于 2011-7-11 20:04:12

|

只看该作者

回复【6楼】pengchhui

-----------------------------------------------------------------------

驱动要装的

f4785db19d5f7cbd2f966207f662313b.png

(302050131)

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-11 22:45:19

|

只看该作者

USB 学习

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-12 20:52:17

|

只看该作者

回复【楼主位】jiaxinhui

-----------------------------------------------------------------------

我已经成功移植你的程序。。。谢谢楼主的指点了。。小弟还有一事相求。。就是我在单独调试串口的时候怎么上位机用串口调试工具收到的是乱码啊,不是我想发的0x43?!

我的代码如下:

#include "stm32f10x.h"

#include "stm32_eval.h"

#include

USART_InitTypeDef USART_InitStructure;

void GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

static void Delay_ARMJISHU(__IO uint32_t nCount)

{

for (; nCount != 0; nCount--);

}

int main(void)

{

GPIO_Config();

USART_InitStructure.USART_BaudRate = 115200;

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(USART1,&USART_InitStructure );

USART_Cmd(USART1, ENABLE);

USART_ClearFlag(USART1,USART_FLAG_TC);

printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r");

while (1)

{

USART1->DR=0x43;

while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);

Delay_ARMJISHU(10000);

}

}

#ifdef  USE_FULL_ASSERT

void assert_failed(uint8_t* file, uint32_t line)

{

while (1)

{

}

}

#endif

d0190427c344793df886389d20f348a0.png

(301964372)

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-12 22:34:38

|

只看该作者

记号

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-13 08:39:58

|

只看该作者

路过学习

3ed6c70162101cdc4cfc0ceaf175c8cd.png

楼主|

发表于 2011-7-13 09:44:03

|

只看该作者

波特率设置的对吗?

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-13 12:28:29

|

只看该作者

回复【楼主位】jiaxinhui

-----------------------------------------------------------------------

我用的是您的USB虚拟串口的例子,程序已经调通了,谢谢了,可以发送“STM32Vrtual”用上位机串口调试工具能接受到“STM32Vrtual”了,

但是我想发送一个十进制的数组a[5]={1,2,3,4,5};却不知道怎么定义,发送函数USB_Send_Data只能发送unsigned char型的数据,我应该怎么改程序啊?!

void USB_Send_Data(u8* data_buffer)

{

count_in=60;

UserToPMABufferCopy(data_buffer, ENDP1_TXADDR, count_in);

SetEPTxCount(ENDP1, count_in);

SetEPTxValid(ENDP1);

}

int main(void)

{

Set_System();

Set_USBClock();

USB_Interrupts_Config();

USB_Init();

while (1)

{

USB_Send_Data("STM32Vrtual\r\n");

}

}

3e5658b04f12910538151c2cf3e162c7.png

(301908115)

4e3a061a6cee689711774664b8e32641.png

发表于 2011-7-13 14:12:15

|

只看该作者

void USB_Send_Data(u8* data_buffer, u8 len)

{

count_in=len;

UserToPMABufferCopy(data_buffer, ENDP1_TXADDR, count_in);

SetEPTxCount(ENDP1, count_in);

SetEPTxValid(ENDP1);

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值