找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3438|回复: 1
打印 上一主题 下一主题
收起左侧

stm32f103单片机USB程序 64字节发送

[复制链接]
跳转到指定楼层
楼主
本例程在正点原子Mini开发板上测试通过,应用非常方便,提供出来给有需要的朋友使用。



stm32f103下位机程序:
  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name          : main.c
  3. * Author             : MCD Application Team
  4. * Version            : V2.2.0
  5. * Description        : Custom HID demo main file
  6. ********************************************************************************
  7. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  8. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  9. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  10. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  11. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  12. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  13. *******************************************************************************/

  14. /* Includes ------------------------------------------------------------------*/
  15. #include "stm32f10x_lib.h"
  16. #include "usb_lib.h"
  17. #include "hw_config.h"

  18. #define GPIO(a,b,c) a->ODR=(a->ODR&(~(1<<b)))|(c ? (1<<b):0)   //GPIO(GPIOA,0,1);
  19. #define IOSET1(a,b) a->BSRR = (1<<b)                           //IOSET1(GPIOA,0);
  20. #define IOSET0(a,b) a->BRR = (1<<b)                                                           //IOSET0(GPIOA,0);
  21. #define GETIO(a,b)  a->IDR & (1<<b)                                                           //x=GETIO(GPIOA,0);

  22. /* Private typedef -----------------------------------------------------------*/
  23. /* Private define ------------------------------------------------------------*/
  24. /* Private macro -------------------------------------------------------------*/
  25. /* Private variables ---------------------------------------------------------*/
  26. /* Extern variables ----------------------------------------------------------*/
  27. /* Private function prototypes -----------------------------------------------*/
  28. void Delay(vu32 nCount);
  29. u8 keydown;

  30. /* Private functions ---------------------------------------------------------*/
  31. u8 Receive_Buffer[64];
  32. u8 InBuffer[0x40];
  33. u32 kc;

  34. /* Private function prototypes -----------------------------------------------*/
  35. /* Private functions ---------------------------------------------------------*/
  36. /*******************************************************************************
  37. * Function Name  : EP1_OUT_Callback.
  38. * Description    : EP1 OUT Callback Routine.
  39. * Input          : None.
  40. * Output         : None.
  41. * Return         : None.
  42. *******************************************************************************/
  43. void EP1_OUT_Callback(void)
  44. {
  45.         u8 DataLen;
  46.         DataLen = GetEPRxCount(ENDP1);
  47.         PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR, DataLen);
  48.         SetEPRxValid(ENDP1);
  49.         IOSET1(GPIOB,6);
  50.         kc=0xffff;

  51. }
  52. /*******************************************************************************
  53. * Function Name  : main.
  54. * Description    : main routine.
  55. * Input          : None.
  56. * Output         : None.
  57. * Return         : None.
  58. *******************************************************************************/
  59. int main(void)
  60. {
  61.        
  62.         u8 i;
  63.         static u8 c=0;
  64.         #ifdef DEBUG
  65.         debug();
  66.         #endif
  67.        
  68.         Set_System();
  69.        
  70.         USB_Interrupts_Config();
  71.        
  72.         Set_USBClock();
  73.        
  74.         USB_Init();
  75.        
  76.         RCC->APB2ENR|=1<<3;    //使能PORTB时钟
  77.         GPIOB->CRL&=0XF00FFF0F;
  78.         GPIOB->CRL|=0X03300080;
  79.         IOSET1(GPIOB,1);

  80.         while (1)
  81.         {
  82.                 if((GETIO(GPIOB,1))==0)
  83.                 {
  84.                         Delay(100000);
  85.                         if((GETIO(GPIOB,1))==0 && keydown==1)
  86.                         {
  87.                                 keydown=0;
  88.                               c++;
  89.                               //Delay(1000000);
  90.                               for(i=0;i<64;i++)InBuffer[i]=c;
  91.                               /*copy InBuffer to ENDP1 Tx Packet Memory Area*/
  92.                               UserToPMABufferCopy(InBuffer, GetEPTxAddr(ENDP1), 64);
  93.                               SetEPTxCount(ENDP1, 64);
  94.                               /* enable endpoint for transmission */
  95.                               SetEPTxValid(ENDP1);
  96.                                   IOSET1(GPIOB,5);
  97.                         }
  98.                 }
  99.                 else
  100.                 {
  101.                          //IOSET0(GPIOD,2);
  102.                         IOSET0(GPIOB,5);
  103.                         keydown=1;
  104.                 }
  105.                 if(kc!=0)
  106.                 {
  107.                         kc--;
  108.                         Delay(5);
  109.                            if(kc==0)
  110.                         {
  111.                                 IOSET0(GPIOB,6);       
  112.                         }
  113.                 }       
  114.         }
  115. }

  116. /*******************************************************************************
  117. * Function Name  : Delay
  118. * Description    : Inserts a delay time.
  119. * Input          : nCount: specifies the delay time length.
  120. * Output         : None
  121. * Return         : None
  122. *******************************************************************************/
  123. void Delay(vu32 nCount)
  124. {
  125.   for(; nCount!= 0;nCount--);
  126. }

  127. #ifdef  DEBUG
  128. /*******************************************************************************
  129. * Function Name  : assert_failed
  130. * Description    : Reports the name of the source file and the source line number
  131. *                  where the assert_param error has occurred.
  132. ……………………

  133. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
MYCustom_HID.rar (1.24 MB, 下载次数: 48)




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:156860 发表于 2019-3-30 17:54 | 只看该作者
学习,了解!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表