久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2455|回復: 1
打印 上一主題 下一主題
收起左側

STM32F103 VCP代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:521626 發表于 2019-6-5 23:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM32F103 實現虛擬串口,進行串口通信,實現了USB通信

單片機源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm32f10x.h"
  3. #include <stdio.h>
  4. /* Private typedef -----------------------------------------------------------*/

  5. /* Private define ------------------------------------------------------------*/

  6. /*LED燈相關定義*/
  7. #define RCC_GPIO_LED                    RCC_APB2Periph_GPIOD    /*LED使用的GPIO時鐘*/
  8. #define LEDn                            4                       /*神舟III號LED數量*/
  9. #define GPIO_LED                        GPIOD                  /*神舟III號LED燈使用的GPIO組*/

  10. #define DS1_PIN                         GPIO_Pin_8              /*DS1使用的GPIO管腳*/
  11. #define DS2_PIN                         GPIO_Pin_9                                /*DS2使用的GPIO管腳*/
  12. #define DS3_PIN                         GPIO_Pin_10                          /*DS3使用的GPIO管腳*/
  13. #define DS4_PIN                         GPIO_Pin_11                                /*DS4使用的GPIO管腳*/

  14. //按鍵的定義

  15. #define RCC_GPIO_KEY1                    RCC_APB2Periph_GPIOD    /*按鍵1使用的GPIO時鐘*/
  16. #define GPIO_KEY1                        GPIOD                  /*按鍵使用的GPIO組*/
  17. #define KEY1_PIN                         GPIO_Pin_0              /*按鍵1使用的GPIO管腳*/

  18. #define RCC_GPIO_KEY2                    RCC_APB2Periph_GPIOD    /*按鍵2使用的GPIO時鐘*/
  19. #define GPIO_KEY2                        GPIOD                  /*按鍵2使用的GPIO組*/
  20. #define KEY2_PIN                         GPIO_Pin_1              /*按鍵2使用的GPIO管腳*/

  21. #define RCC_GPIO_KEY3                    RCC_APB2Periph_GPIOD    /*按鍵3使用的GPIO時鐘*/
  22. #define GPIO_KEY3                        GPIOD                  /*按鍵3使用的GPIO組*/
  23. #define KEY3_PIN                         GPIO_Pin_2              /*按鍵3使用的GPIO管腳*/

  24. #define RCC_GPIO_KEY4                    RCC_APB2Periph_GPIOD    /*按鍵4使用的GPIO時鐘*/
  25. #define GPIO_KEY4                        GPIOD                  /*按鍵4使用的GPIO組*/
  26. #define KEY4_PIN                         GPIO_Pin_3              /*按鍵4使用的GPIO管腳*/


  27. //串口1                TX PA9 RX-PA10
  28. #define RCC_GPIO_UART1                                        RCC_APB2Periph_GPIOA    /*按鍵4使用的GPIO時鐘*/
  29. #define GPIO_UART1                       GPIOA                  /*按鍵4使用的GPIO組*/
  30. #define TX1_PIN                         GPIO_Pin_9              /*按鍵4使用的GPIO管腳*/
  31. #define RX1_PIN                         GPIO_Pin_10              /*按鍵4使用的GPIO管腳*/

  32. //串口2         TX -PA2  RX-PA3
  33. #define RCC_GPIO_USART2                                        RCC_APB2Periph_GPIOA    /*USART2的GPIO時鐘*/
  34. #define GPIO_USART2                      GPIOA                  /*USART2使用的GPIO組*/
  35. #define TX3_PIN                         GPIO_Pin_2              /*USART2使用的GPIO管腳*/
  36. #define RX3_PIN                         GPIO_Pin_3              /*USART2使用的GPIO管腳*/
  37. /* Private macro -------------------------------------------------------------*/

  38. /* Private function prototypes -----------------------------------------------*/
  39. //宏定義 為適合不同的編譯系統
  40. #ifdef __GNUC__
  41.   /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  42.      set to 'Yes') calls __io_putchar() */
  43.   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  44. #else
  45.   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  46. #endif /* __GNUC__ */

  47. /* Private variables ---------------------------------------------------------*/
  48. GPIO_InitTypeDef GPIO_InitStructure;
  49. USART_InitTypeDef USART_InitStructure;
  50. ErrorStatus HSEStartUpStatus;
  51. u8 count=0;

  52. /* Private function prototypes -----------------------------------------------*/
  53. void RCC_Configuration(void);
  54. void NVIC_Configuration(void);
  55. void Delay(vu32 nCount);
  56. void Turn_On_LED(u8 LED_NUM);

  57. /* Private functions ---------------------------------------------------------*/

  58. /*******************************************************************************
  59. * Function Name  : main
  60. * Description    : Main program.
  61. * Input          : None
  62. * Output         : None
  63. * Return         : None
  64. *******************************************************************************/
  65. int main(void)
  66. {
  67.         u8 i=1;
  68.         /* 配置神舟III號LED燈使用的GPIO管腳模式*/
  69.        
  70.         //        RCC_DeInit();
  71.         //        RCC_HSEConfig(RCC_HSE_ON);
  72.         //        RCC_HSICmd(ENABLE);
  73.         //        while(RCC_WaitForHSEStartUp()!=SUCCESS);
  74.         //        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_16 );
  75.         //        RCC_PLLCmd(ENABLE);
  76.         //
  77.         //        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK );
  78.         //LED設置
  79.         RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE); /*使能LED燈使用的GPIO時鐘*/
  80.        
  81.         GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN;
  82.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;
  83.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  84.        
  85.         GPIO_Init(GPIO_LED, &GPIO_InitStructure);  /*神州III號使用的LED燈相關的GPIO口初始化*/
  86.         GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*關閉所有的LED指示燈*/
  87.        
  88.         //按鍵1設置
  89.         RCC_APB2PeriphClockCmd(RCC_GPIO_KEY1, ENABLE); /*使能LED燈使用的GPIO時鐘*/
  90.        
  91.         GPIO_InitStructure.GPIO_Pin = KEY1_PIN;
  92.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU ;
  93.         GPIO_Init(GPIO_KEY1, &GPIO_InitStructure);  /*神州III號使用的按鍵1相關的GPIO口初始化*/
  94.        
  95.         //按鍵2設置
  96.         RCC_APB2PeriphClockCmd(RCC_GPIO_KEY2, ENABLE); /*使能按鍵2使用的GPIO時鐘*/
  97.        
  98.         GPIO_InitStructure.GPIO_Pin = KEY2_PIN;
  99.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU ;
  100.         GPIO_Init(GPIO_KEY2, &GPIO_InitStructure);  /*神州III號使用的按鍵1相關的GPIO口初始化*/
  101.        
  102.         //按鍵3設置
  103.         RCC_APB2PeriphClockCmd(RCC_GPIO_KEY3, ENABLE); /*使能按鍵3使用的GPIO時鐘*/
  104.        
  105.         GPIO_InitStructure.GPIO_Pin = KEY3_PIN;
  106.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU ;
  107.         GPIO_Init(GPIO_KEY3, &GPIO_InitStructure);  /*神州III號使用的按鍵1相關的GPIO口初始化*/
  108.        
  109.         //按鍵4設置
  110.         RCC_APB2PeriphClockCmd(RCC_GPIO_KEY4, ENABLE); /*使能按鍵4使用的GPIO時鐘*/
  111.        
  112.         GPIO_InitStructure.GPIO_Pin = KEY4_PIN;
  113.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU ;
  114.         GPIO_Init(GPIO_KEY4, &GPIO_InitStructure);  /*神州III號使用的按鍵1相關的GPIO口初始化*/
  115.        
  116.         //********************************************************************
  117.         //串口1端口
  118.         /* Enable GPIO clock */
  119.         RCC_APB2PeriphClockCmd( RCC_GPIO_UART1|RCC_APB2Periph_AFIO, ENABLE);
  120.        
  121.         /* Enable UART clock */
  122.        
  123.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  124.        
  125.         /* Configure USART Tx as alternate function push-pull */
  126.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  127.         GPIO_InitStructure.GPIO_Pin = TX1_PIN;
  128.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  129.         GPIO_Init(GPIO_UART1, &GPIO_InitStructure);
  130.        
  131.         /* Configure USART Rx as input floating */
  132.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  133.         GPIO_InitStructure.GPIO_Pin = RX1_PIN;
  134.         GPIO_Init(GPIO_UART1, &GPIO_InitStructure);
  135.        
  136.         /*串口1參數配置*/
  137.         USART_InitStructure.USART_BaudRate = 115200;                 /*設置波特率為115200*/
  138.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;  /*設置數據位為8位*/
  139.         USART_InitStructure.USART_StopBits = USART_StopBits_1;       /*設置停止位為1位*/
  140.         USART_InitStructure.USART_Parity = USART_Parity_No;          /*無奇偶校驗*/   
  141.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /*沒有硬件流控*/
  142.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;      /*發送與接收*/
  143.         /*完成串口COM1的時鐘配置、GPIO配置,根據上述參數初始化并使能*/
  144.         /* USART configuration */
  145.         USART_Init(USART1, &USART_InitStructure);
  146.                 /* Enable USART */
  147.         USART_Cmd(USART1, ENABLE);

  148.         //********************************************************************
  149.         //串口2端口
  150.         /* Enable GPIO clock */
  151.         RCC_APB2PeriphClockCmd( RCC_GPIO_USART2|RCC_APB2Periph_AFIO, ENABLE);
  152.        
  153.         /* Enable UART clock */
  154.        
  155.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  156.        
  157.         /* Configure USART Tx as alternate function push-pull */
  158.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  159.         GPIO_InitStructure.GPIO_Pin = TX3_PIN;
  160.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  161.         GPIO_Init(GPIO_USART2, &GPIO_InitStructure);
  162.        
  163.         /* Configure USART Rx as input floating */
  164.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  165.         GPIO_InitStructure.GPIO_Pin = RX3_PIN;
  166.         GPIO_Init(GPIO_USART2, &GPIO_InitStructure);


  167.         /*串口2參數配置*/
  168.         USART_InitStructure.USART_BaudRate = 115200;                 /*設置波特率為115200*/
  169.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;  /*設置數據位為8位*/
  170.         USART_InitStructure.USART_StopBits = USART_StopBits_1;       /*設置停止位為1位*/
  171.         USART_InitStructure.USART_Parity = USART_Parity_No;          /*無奇偶校驗*/   
  172.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /*沒有硬件流控*/
  173.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;      /*發送與接收*/
  174.         /*完成串口COM1的時鐘配置、GPIO配置,根據上述參數初始化并使能*/
  175.         /* USART configuration */
  176.         USART_Init(USART2, &USART_InitStructure);
  177.                 /* Enable USART */
  178.         USART_Cmd(USART2, ENABLE);


  179.         while(1)
  180.         {
  181.                 printf("\nSTM32F103實驗中。。。。。。\n");
  182.                 printf("數字是%d",i);
  183.                 i++;
  184.                 Delay(0x1ffFFFF);
  185.           }
  186. }

  187. /*點亮對應燈*/
  188. void Turn_On_LED(u8 LED_NUM)
  189. {
  190.         switch(LED_NUM)
  191.         {
  192.         case 0:
  193.           GPIO_ResetBits(GPIO_LED,DS1_PIN);  /*點亮DS1燈*/
  194.           break;
  195.         case 1:
  196.           GPIO_ResetBits(GPIO_LED,DS2_PIN);  /*點亮DS2燈*/
  197.           break;
  198.         case 2:
  199.           GPIO_ResetBits(GPIO_LED,DS3_PIN);  /*點亮DS3燈*/
  200.           break;
  201.         case 3:
  202.           GPIO_ResetBits(GPIO_LED,DS4_PIN);  /*點亮DS4燈*/
  203.           break;         
  204.         default:
  205.                   GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN); /*點亮所有的燈*/
  206.           break;
  207.         }
  208. }


  209. PUTCHAR_PROTOTYPE
  210. {
  211.   /* Place your implementation of fputc here */
  212.   /* e.g. write a character to the USART */
  213.   USART_SendData(USART2, (uint8_t) ch); /*發送一個字符函數*/

  214.   /* Loop until the end of transmission */
  215.   while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)/*等待發送完成*/
  216.   {
  217.   
  218.   }
  219.   return ch;
  220. }



  221. /*******************************************************************************
  222. * Function Name  : Delay
  223. * Description    : Inserts a delay time.
  224. * Input          : nCount: specifies the delay time length.
  225. * Output         : None
  226. * Return         : None
  227. *******************************************************************************/
  228. void Delay(vu32 nCount)
  229. {
  230.   for(; nCount != 0; nCount--);
  231. }



  232. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
復制代碼

所有資料51hei提供下載:
STM32F103 實現虛擬串口,進行串口通信,實現了USB通信.7z (540.68 KB, 下載次數: 22)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:370824 發表于 2022-7-22 11:52 | 只看該作者
編譯都沒通過,還封裝了一個靜態LIB.
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲毛片网站 | 天天干天天操天天爽 | 黄色国产| 国产一区二区三区免费视频 | 亚洲人成人一区二区在线观看 | 伊人天堂网 | 日韩欧美三区 | 羞羞的视频免费在线观看 | 国产精品免费观看 | 亚洲91精品 | 免费久久网站 | 91社区在线观看播放 | 久久精品国产一区二区电影 | 在线视频成人 | 亚洲一在线| 成人在线观看网址 | www.亚洲视频.com | 91免费福利在线 | 国产亚洲精品久久19p | 成人av一区二区在线观看 | 国产精品色婷婷久久58 | 91原创视频 | 国产传媒| 色噜噜狠狠色综合中国 | 一级黄色日本片 | 日韩欧美亚洲 | 国产免费让你躁在线视频 | 亚洲网站在线播放 | 一区二区三区四区不卡 | 欧美啊v在线观看 | 成人a免费 | 九九色综合 | 精品美女久久久 | 日韩久久精品 | 日韩精品一区二区三区中文在线 | 亚洲综合一区二区三区 | 日本不卡一区 | 亚洲综合视频 | 亚洲综合天堂网 | 在线观看涩涩视频 | 午夜成人在线视频 |