I'm trying to port GRBL 1.1 to the STM32F746 chip. Tell me the solution, thanks.
usb/hw_config.c@0:f1834a63f7c1, 2017-09-04 (annotated)
- Committer:
- Sergunb
- Date:
- Mon Sep 04 12:03:42 2017 +0000
- Revision:
- 0:f1834a63f7c1
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sergunb | 0:f1834a63f7c1 | 1 | /******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** |
Sergunb | 0:f1834a63f7c1 | 2 | * File Name : hw_config.c |
Sergunb | 0:f1834a63f7c1 | 3 | * Author : MCD Application Team |
Sergunb | 0:f1834a63f7c1 | 4 | * Version : V3.3.0 |
Sergunb | 0:f1834a63f7c1 | 5 | * Date : 21-March-2011 |
Sergunb | 0:f1834a63f7c1 | 6 | * Description : Hardware Configuration & Setup |
Sergunb | 0:f1834a63f7c1 | 7 | ******************************************************************************** |
Sergunb | 0:f1834a63f7c1 | 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS |
Sergunb | 0:f1834a63f7c1 | 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. |
Sergunb | 0:f1834a63f7c1 | 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, |
Sergunb | 0:f1834a63f7c1 | 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE |
Sergunb | 0:f1834a63f7c1 | 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING |
Sergunb | 0:f1834a63f7c1 | 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. |
Sergunb | 0:f1834a63f7c1 | 14 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 15 | |
Sergunb | 0:f1834a63f7c1 | 16 | #include "stm32f10x_it.h" |
Sergunb | 0:f1834a63f7c1 | 17 | |
Sergunb | 0:f1834a63f7c1 | 18 | #include "usb_lib.h" |
Sergunb | 0:f1834a63f7c1 | 19 | #include "usb_prop.h" |
Sergunb | 0:f1834a63f7c1 | 20 | #include "usb_desc.h" |
Sergunb | 0:f1834a63f7c1 | 21 | #include "hw_config.h" |
Sergunb | 0:f1834a63f7c1 | 22 | #include "platform_config.h" |
Sergunb | 0:f1834a63f7c1 | 23 | #include "usb_pwr.h" |
Sergunb | 0:f1834a63f7c1 | 24 | #include "stm32f10x_rcc.h" |
Sergunb | 0:f1834a63f7c1 | 25 | #include "misc.h" |
Sergunb | 0:f1834a63f7c1 | 26 | |
Sergunb | 0:f1834a63f7c1 | 27 | ErrorStatus HSEStartUpStatus; |
Sergunb | 0:f1834a63f7c1 | 28 | |
Sergunb | 0:f1834a63f7c1 | 29 | static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len); |
Sergunb | 0:f1834a63f7c1 | 30 | |
Sergunb | 0:f1834a63f7c1 | 31 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 32 | * Description : Configures Main system clocks & power |
Sergunb | 0:f1834a63f7c1 | 33 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 34 | void Set_System(void) |
Sergunb | 0:f1834a63f7c1 | 35 | { |
Sergunb | 0:f1834a63f7c1 | 36 | } |
Sergunb | 0:f1834a63f7c1 | 37 | |
Sergunb | 0:f1834a63f7c1 | 38 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 39 | * Description : Configures USB Clock input (48MHz) |
Sergunb | 0:f1834a63f7c1 | 40 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 41 | void Set_USBClock(void) |
Sergunb | 0:f1834a63f7c1 | 42 | { |
Sergunb | 0:f1834a63f7c1 | 43 | /* Select USBCLK source */ |
Sergunb | 0:f1834a63f7c1 | 44 | RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); |
Sergunb | 0:f1834a63f7c1 | 45 | |
Sergunb | 0:f1834a63f7c1 | 46 | /* Enable the USB clock */ |
Sergunb | 0:f1834a63f7c1 | 47 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE); |
Sergunb | 0:f1834a63f7c1 | 48 | } |
Sergunb | 0:f1834a63f7c1 | 49 | |
Sergunb | 0:f1834a63f7c1 | 50 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 51 | * Description : Power-off system clocks and power while entering suspend mode |
Sergunb | 0:f1834a63f7c1 | 52 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 53 | void Enter_LowPowerMode(void) |
Sergunb | 0:f1834a63f7c1 | 54 | { |
Sergunb | 0:f1834a63f7c1 | 55 | /* Set the device state to suspend */ |
Sergunb | 0:f1834a63f7c1 | 56 | bDeviceState = SUSPENDED; |
Sergunb | 0:f1834a63f7c1 | 57 | } |
Sergunb | 0:f1834a63f7c1 | 58 | |
Sergunb | 0:f1834a63f7c1 | 59 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 60 | * Description : Restores system clocks and power while exiting suspend mode |
Sergunb | 0:f1834a63f7c1 | 61 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 62 | void Leave_LowPowerMode(void) |
Sergunb | 0:f1834a63f7c1 | 63 | { |
Sergunb | 0:f1834a63f7c1 | 64 | DEVICE_INFO *pInfo = &Device_Info; |
Sergunb | 0:f1834a63f7c1 | 65 | |
Sergunb | 0:f1834a63f7c1 | 66 | /* Set the device state to the correct state */ |
Sergunb | 0:f1834a63f7c1 | 67 | if (pInfo->Current_Configuration != 0) |
Sergunb | 0:f1834a63f7c1 | 68 | { |
Sergunb | 0:f1834a63f7c1 | 69 | /* Device configured */ |
Sergunb | 0:f1834a63f7c1 | 70 | bDeviceState = CONFIGURED; |
Sergunb | 0:f1834a63f7c1 | 71 | } |
Sergunb | 0:f1834a63f7c1 | 72 | else |
Sergunb | 0:f1834a63f7c1 | 73 | { |
Sergunb | 0:f1834a63f7c1 | 74 | bDeviceState = ATTACHED; |
Sergunb | 0:f1834a63f7c1 | 75 | } |
Sergunb | 0:f1834a63f7c1 | 76 | } |
Sergunb | 0:f1834a63f7c1 | 77 | |
Sergunb | 0:f1834a63f7c1 | 78 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 79 | * Description : Configures the USB interrupts |
Sergunb | 0:f1834a63f7c1 | 80 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 81 | void USB_Interrupts_Config(void) |
Sergunb | 0:f1834a63f7c1 | 82 | { |
Sergunb | 0:f1834a63f7c1 | 83 | NVIC_InitTypeDef NVIC_InitStructure; |
Sergunb | 0:f1834a63f7c1 | 84 | |
Sergunb | 0:f1834a63f7c1 | 85 | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); |
Sergunb | 0:f1834a63f7c1 | 86 | |
Sergunb | 0:f1834a63f7c1 | 87 | NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; |
Sergunb | 0:f1834a63f7c1 | 88 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; |
Sergunb | 0:f1834a63f7c1 | 89 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; |
Sergunb | 0:f1834a63f7c1 | 90 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; |
Sergunb | 0:f1834a63f7c1 | 91 | NVIC_Init(&NVIC_InitStructure); |
Sergunb | 0:f1834a63f7c1 | 92 | } |
Sergunb | 0:f1834a63f7c1 | 93 | |
Sergunb | 0:f1834a63f7c1 | 94 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 95 | * Description : Software Connection/Disconnection of USB Cable |
Sergunb | 0:f1834a63f7c1 | 96 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 97 | void USB_Cable_Config(FunctionalState NewState) |
Sergunb | 0:f1834a63f7c1 | 98 | { |
Sergunb | 0:f1834a63f7c1 | 99 | } |
Sergunb | 0:f1834a63f7c1 | 100 | |
Sergunb | 0:f1834a63f7c1 | 101 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 102 | * Description : Create the serial number string descriptor. |
Sergunb | 0:f1834a63f7c1 | 103 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 104 | void Get_SerialNum(void) |
Sergunb | 0:f1834a63f7c1 | 105 | { |
Sergunb | 0:f1834a63f7c1 | 106 | uint32_t Device_Serial0, Device_Serial1, Device_Serial2; |
Sergunb | 0:f1834a63f7c1 | 107 | |
Sergunb | 0:f1834a63f7c1 | 108 | Device_Serial0 = *(__IO uint32_t*) (0x1FFFF7E8); |
Sergunb | 0:f1834a63f7c1 | 109 | Device_Serial1 = *(__IO uint32_t*) (0x1FFFF7EC); |
Sergunb | 0:f1834a63f7c1 | 110 | Device_Serial2 = *(__IO uint32_t*) (0x1FFFF7F0); |
Sergunb | 0:f1834a63f7c1 | 111 | |
Sergunb | 0:f1834a63f7c1 | 112 | Device_Serial0 += Device_Serial2; |
Sergunb | 0:f1834a63f7c1 | 113 | |
Sergunb | 0:f1834a63f7c1 | 114 | if (Device_Serial0 != 0) |
Sergunb | 0:f1834a63f7c1 | 115 | { |
Sergunb | 0:f1834a63f7c1 | 116 | IntToUnicode(Device_Serial0, &Virtual_Com_Port_StringSerial[2], 8); |
Sergunb | 0:f1834a63f7c1 | 117 | IntToUnicode(Device_Serial1, &Virtual_Com_Port_StringSerial[18], 4); |
Sergunb | 0:f1834a63f7c1 | 118 | } |
Sergunb | 0:f1834a63f7c1 | 119 | } |
Sergunb | 0:f1834a63f7c1 | 120 | |
Sergunb | 0:f1834a63f7c1 | 121 | /******************************************************************************* |
Sergunb | 0:f1834a63f7c1 | 122 | * Description : Convert Hex 32Bits value into char. |
Sergunb | 0:f1834a63f7c1 | 123 | *******************************************************************************/ |
Sergunb | 0:f1834a63f7c1 | 124 | static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len) |
Sergunb | 0:f1834a63f7c1 | 125 | { |
Sergunb | 0:f1834a63f7c1 | 126 | uint8_t idx = 0; |
Sergunb | 0:f1834a63f7c1 | 127 | |
Sergunb | 0:f1834a63f7c1 | 128 | for (idx = 0; idx < len; idx++) |
Sergunb | 0:f1834a63f7c1 | 129 | { |
Sergunb | 0:f1834a63f7c1 | 130 | if (((value >> 28)) < 0xA) |
Sergunb | 0:f1834a63f7c1 | 131 | { |
Sergunb | 0:f1834a63f7c1 | 132 | pbuf[2 * idx] = (value >> 28) + '0'; |
Sergunb | 0:f1834a63f7c1 | 133 | } |
Sergunb | 0:f1834a63f7c1 | 134 | else |
Sergunb | 0:f1834a63f7c1 | 135 | { |
Sergunb | 0:f1834a63f7c1 | 136 | pbuf[2 * idx] = (value >> 28) + 'A' - 10; |
Sergunb | 0:f1834a63f7c1 | 137 | } |
Sergunb | 0:f1834a63f7c1 | 138 | |
Sergunb | 0:f1834a63f7c1 | 139 | value = value << 4; |
Sergunb | 0:f1834a63f7c1 | 140 | |
Sergunb | 0:f1834a63f7c1 | 141 | pbuf[2 * idx + 1] = 0; |
Sergunb | 0:f1834a63f7c1 | 142 | } |
Sergunb | 0:f1834a63f7c1 | 143 | } |