当前位置:首页 > 单片机 > 单片机
[导读]串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出。很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发。本章节来简单概述STM32低端芯片上的USB虚拟串口的移植。在官方DEMO中已经提

串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出。很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发。本章节来简单概述STM32低端芯片上的USB虚拟串口的移植。在官方DEMO中已经提供了现成的程序,这里对修改方法做简单说明。

首先打开官方demo我们开始进行移植,第一步复制我们可用的文件,操作如下:

ProjectsVirtual_COM_Port文件夹下,复制红线部分

图1

图2

我为了方便演示统放在usb/src文件夹下:

图3

现在复制USB的库文件,这些文件不需要我们修改:

图4

上图中的文件统一放在usb/lib文件夹下:

图5

好了现在所需要的文件我们以复制完了。这里先讲一下DEMO程序的主要工作流程:

图6

由上图可知,PC通过虚拟串口发送数据到STM32 usb口,STM32再通过usart1发送数据到PC串口。我们做项目时,只用USB虚拟串口即可。所以我们现在需要把串口发送部分删除。把USB做为一个COM口来使用。我们要如何使用这个USB口呢?demo中是把USB发送数据做了一个缓存,先把要发送的数据存入缓存中,然后由USB自动发送出去。而接收部分是直接通过串口透传。我们在应用时就需要用到两个FIFO,1是发送,这个和demo方式是样;2是接收,接收也做一个缓存,我们通过查询来判断是否收到新数据。这下大家应该明白为什么使用两个FIFO了。 我这里有写好的FIFO库函数可直接使用Queue.c文件。

现在开始修改:

1,stm32_it.c 更名为usb_it.c删除无用代码,只保留usb中断函数,和唤醒函数。代码如下:

代码1

1 /* Includes ------------------------------------------------------------------*/

2 #include "hw_config.h"

3 #include "usb_lib.h"

4 #include "usb_istr.h"

5

6

7 /*******************************************************************************

8 * Function Name : USB_IRQHandler

9 * Description : This function handles USB Low Priority interrupts

10 * requests.

11 * Input : None

12 * Output : None

13 * Return : None

14 *******************************************************************************/

15 #if defined(STM32L1XX_MD) "| defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS)|| defined (STM32F37X)

16 void USB_LP_IRQHandler(void)

17 #else

18 void USB_LP_CAN1_RX0_IRQHandler(void)

19 #endif

20 {

21 USB_Istr();

22 }

23

24 /*******************************************************************************

25 * Function Name : USB_FS_WKUP_IRQHandler

26 * Description : This function handles USB WakeUp interrupt request.

27 * Input : None

28 * Output : None

29 * Return : None

30 *******************************************************************************/

31

32 #if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS)

33 void USB_FS_WKUP_IRQHandler(void)

34 #else

35 void USBWakeUp_IRQHandler(void)

36 #endif

37 {

38 EXTI_ClearITPendingBit(EXTI_Line18);

39 }

2,修改代码hw_config.c删除无用代码,新建立2组,读FIFO和写FIFO的函数。后面会用到。

代码如下:

1 /* Includes ------------------------------------------------------------------*/

2

3 #include "usb_lib.h"

4 #include "usb_prop.h"

5 #include "usb_desc.h"

6 #include "hw_config.h"

7 #include "usb_pwr.h"

8 #include "Queue.h"

9

10

11 /* Private typedef -----------------------------------------------------------*/

12 /* Private define ------------------------------------------------------------*/

13 /* Private macro -------------------------------------------------------------*/

14 /* Private variables ---------------------------------------------------------*/

15 ErrorStatus HSEStartUpStatus;

16 USART_InitTypeDef USART_InitStructure;

17 EXTI_InitTypeDef EXTI_InitStructure;

18

19

20 #define USB_COM_RX_BUF_SIZE (1024 + 256)

21 #define USB_COM_TX_BUF_SIZE (1024 + 256)

22

23 static QUEUE8_t m_QueueUsbComRx = {0};

24 static QUEUE8_t m_QueueUsbComTx = {0};

25 static uint8_t m_UsbComRxBuf[USB_COM_RX_BUF_SIZE] = {0};

26 static uint8_t m_UsbComTxBuf[USB_COM_TX_BUF_SIZE] = {0};

27

28 static void IntToUnicode (uint32_t value , uint8_t *pbuf , uint8_t len);

29 /* Extern variables ----------------------------------------------------------*/

30

31 extern LINE_CODING linecoding;

32

33 /* Private function prototypes -----------------------------------------------*/

34 /* Private functions ---------------------------------------------------------*/

35 /*******************************************************************************

36 * Function Name : Set_System

37 * Description : Configures Main system clocks & power

38 * Input : None.

39 * Return : None.

40 *******************************************************************************/

41 void Set_System(void)

42 {

43 GPIO_InitTypeDef GPIO_InitStructure;

44

45 QUEUE_PacketCreate(&m_QueueUsbComRx, m_UsbComRxBuf, sizeof(m_UsbComRxBuf));

46 QUEUE_PacketCreate(&m_QueueUsbComTx, m_UsbComTxBuf, sizeof(m_UsbComTxBuf));

47

48 /* Enable USB_DISCONNECT GPIO clock */

49 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE);

50

51 /* Configure USB pull-up pin */

52 GPIO_InitStructure.GPIO_Pin = USB_DISCONNECT_PIN;

53 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

54 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

55 GPIO_Init(USB_DISCONNECT, &GPIO_InitStructure);

56

57 /* Configure the EXTI line 18 connected internally to the USB IP */

58 EXTI_ClearITPendingBit(EXTI_Line18);

59 EXTI_InitStructure.EXTI_Line = EXTI_Line18;

60 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

61 EXTI_InitStructure.EXTI_LineCmd = ENABLE;

62 EXTI_Init(&EXTI_InitStructure);

63

64

65 }

66

67 /*******************************************************************************

68 * Function Name : Set_USBClock

69 * Description : Configures USB Clock input (48MHz)

70 * Input : None.

71 * Return : None.

72 *******************************************************************************/

73 void Set_USBClock(void)

74 {

75 /* Select USBCLK source */

76 RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);

77

78 /* Enable the USB clock */

79 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);

80 }

81

82 /*******************************************************************************

83 * Function Name : Enter_LowPowerMode

84 * Description : Power-off system clocks and power while entering suspend mode

85 * Input : None.

86 * Return : None.

87 *******************************************************************************/

88 void Enter_LowPowerMode(void)

89 {

90 /* Set the device state to suspend */

91 bDeviceState = SUSPENDED;

92 }

93

94 /*******************************************************************************

95 * Function Name : Leave_LowPowerMode

96 * Description : Restores system clocks and power while exiting suspend mode

97 * Input : None.

98 * Return : None.

99 *******************************************************************************/

100 void Leave_LowPowerMode(void)

101 {

102 DEVICE_INFO *pInfo = &Device_Info;

103

104 /* Set the device state to the correct state */

105 if (pInfo->Current_Configuration != 0)

106 {

107 /* Device configured */

108 bDeviceState = CONFIGURED;

109 }

110 else

111 {

112 bDeviceState = ATTACHED;

113 }

114 /*Enable SystemCoreClock*/

115 // SystemInit();

116 }

117

118 /*******************************************************************************

119 * Function Name : USB_Interrupts_Config

120 * Description : Configures the USB interrupts

121 * Input : None.

122 * Return : None.

123 *******************************************************************************/

124 void USB_Interrupts_Config(void)

125 {

126 NVIC_InitTypeDef NVIC_InitStructure;

127

128 NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;

129 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

130 NVIC

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭