You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
442 lines
15 KiB
442 lines
15 KiB
#include "apphal.hpp"
|
|
|
|
#include "uappbase\appcfg\appcfg.hpp"
|
|
using namespace iflytop;
|
|
|
|
void AppHal::MX_TIM6_Init(void) {
|
|
__HAL_RCC_TIM6_CLK_ENABLE();
|
|
|
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
|
htim6.Instance = TIM6;
|
|
htim6.Init.Prescaler = 71;
|
|
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
htim6.Init.Period = 65535;
|
|
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
if (HAL_TIM_Base_Init(&htim6) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
/* TIM6 interrupt Init */
|
|
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
|
|
}
|
|
/* TIM7 init function */
|
|
void AppHal::MX_TIM7_Init(void) {
|
|
__HAL_RCC_TIM7_CLK_ENABLE();
|
|
|
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
|
htim7.Instance = TIM7;
|
|
htim7.Init.Prescaler = 81;
|
|
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
htim7.Init.Period = 65535;
|
|
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
if (HAL_TIM_Base_Init(&htim7) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
/* TIM7 interrupt Init */
|
|
HAL_NVIC_SetPriority(TIM7_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(TIM7_IRQn);
|
|
}
|
|
|
|
#define EARLY_ASSERT(exptr) \
|
|
if (!(exptr)) { \
|
|
while (true) { \
|
|
} \
|
|
}
|
|
|
|
void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) {
|
|
#if (DEBUG_UART_INDEX == 1)
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
|
|
__HAL_RCC_USART1_CLK_ENABLE();
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
__HAL_RCC_DMA2_CLK_ENABLE();
|
|
|
|
if (tx == PA9 && rx == PA10) {
|
|
GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
} else if (tx == PB6 && rx == PB7) {
|
|
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
} else {
|
|
EARLY_ASSERT(false);
|
|
}
|
|
|
|
huart1.Instance = USART1;
|
|
huart1.Init.BaudRate = baudrate;
|
|
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
|
huart1.Init.StopBits = UART_STOPBITS_1;
|
|
huart1.Init.Parity = UART_PARITY_NONE;
|
|
huart1.Init.Mode = UART_MODE_TX_RX;
|
|
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
|
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
|
|
if (HAL_UART_Init(&huart1) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
|
|
hdma2_stream2.Instance = DMA2_Stream2;
|
|
hdma2_stream2.Init.Channel = DMA_CHANNEL_4;
|
|
hdma2_stream2.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
|
hdma2_stream2.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
hdma2_stream2.Init.MemInc = DMA_MINC_ENABLE;
|
|
hdma2_stream2.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
hdma2_stream2.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
hdma2_stream2.Init.Mode = DMA_NORMAL;
|
|
hdma2_stream2.Init.Priority = DMA_PRIORITY_LOW;
|
|
hdma2_stream2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
if (HAL_DMA_Init(&hdma2_stream2) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
__HAL_LINKDMA(&huart1, hdmarx, hdma2_stream2);
|
|
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(USART1_IRQn);
|
|
|
|
#else
|
|
#error "DEBUG_UART_INDEX not supported"
|
|
#endif
|
|
}
|
|
|
|
void AppHal::MX_IWDG_Init(void) {
|
|
hiwdg.Instance = IWDG;
|
|
hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
|
|
hiwdg.Init.Reload = 4095;
|
|
if (HAL_IWDG_Init(&hiwdg) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
}
|
|
|
|
void AppHal::UART3_Init(Pin_t tx, Pin_t rx, int32_t baudrate) {
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
|
|
__HAL_RCC_USART3_CLK_ENABLE();
|
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
__HAL_RCC_DMA1_CLK_ENABLE();
|
|
|
|
huart3.Instance = USART3;
|
|
huart3.Init.BaudRate = baudrate;
|
|
huart3.Init.WordLength = UART_WORDLENGTH_8B;
|
|
huart3.Init.StopBits = UART_STOPBITS_1;
|
|
huart3.Init.Parity = UART_PARITY_NONE;
|
|
huart3.Init.Mode = UART_MODE_TX_RX;
|
|
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
|
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
|
|
if (HAL_UART_Init(&huart3) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
if (tx == PB10 && rx == PB11) {
|
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
} else if (tx == PD8 && rx == PD9) {
|
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
|
GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
|
|
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
|
} else {
|
|
ASSERT(false, "UART3 NOT SUPPORT PIN");
|
|
}
|
|
|
|
hdma1_stream1.Instance = DMA1_Stream1;
|
|
hdma1_stream1.Init.Channel = DMA_CHANNEL_4;
|
|
hdma1_stream1.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
|
hdma1_stream1.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
hdma1_stream1.Init.MemInc = DMA_MINC_ENABLE;
|
|
hdma1_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
hdma1_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
hdma1_stream1.Init.Mode = DMA_NORMAL;
|
|
hdma1_stream1.Init.Priority = DMA_PRIORITY_LOW;
|
|
hdma1_stream1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
if (HAL_DMA_Init(&hdma1_stream1) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
__HAL_LINKDMA(&huart3, hdmarx, hdma1_stream1);
|
|
|
|
hdma1_stream3.Instance = DMA1_Stream3;
|
|
hdma1_stream3.Init.Channel = DMA_CHANNEL_4;
|
|
hdma1_stream3.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
|
hdma1_stream3.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
hdma1_stream3.Init.MemInc = DMA_MINC_ENABLE;
|
|
hdma1_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
hdma1_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
hdma1_stream3.Init.Mode = DMA_NORMAL;
|
|
hdma1_stream3.Init.Priority = DMA_PRIORITY_LOW;
|
|
hdma1_stream3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
if (HAL_DMA_Init(&hdma1_stream3) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
__HAL_LINKDMA(&huart3, hdmatx, hdma1_stream3);
|
|
|
|
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
|
|
|
|
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
|
|
|
|
HAL_NVIC_SetPriority(USART3_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(USART3_IRQn);
|
|
}
|
|
|
|
/**
|
|
* @brief
|
|
*/
|
|
void AppHal::UART4_Init(Pin_t tx, Pin_t rx, int32_t baudrate) {
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
|
|
__HAL_RCC_UART4_CLK_ENABLE();
|
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
|
|
huart4.Instance = UART4;
|
|
huart4.Init.BaudRate = baudrate; // 256000
|
|
huart4.Init.WordLength = UART_WORDLENGTH_8B;
|
|
huart4.Init.StopBits = UART_STOPBITS_1;
|
|
huart4.Init.Parity = UART_PARITY_NONE;
|
|
huart4.Init.Mode = UART_MODE_TX_RX;
|
|
huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
|
huart4.Init.OverSampling = UART_OVERSAMPLING_16;
|
|
if (HAL_UART_Init(&huart4) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
/**UART4 GPIO Configuration
|
|
PC10 ------> UART4_TX
|
|
PC11 ------> UART4_RX
|
|
*/
|
|
if (tx == PC10 && rx == PC11) {
|
|
GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
|
} else {
|
|
ASSERT(false, "UART4 NOT SUPPORT PIN");
|
|
}
|
|
|
|
/* UART4 interrupt Init */
|
|
HAL_NVIC_SetPriority(UART4_IRQn, 5, 0);
|
|
HAL_NVIC_EnableIRQ(UART4_IRQn);
|
|
|
|
/***********************************************************************************************************************
|
|
* DMA_INIT *
|
|
***********************************************************************************************************************/
|
|
|
|
/* UART4 DMA Init */
|
|
/* UART4_RX Init */
|
|
hdma1_stream2.Instance = DMA1_Stream2;
|
|
hdma1_stream2.Init.Channel = DMA_CHANNEL_4;
|
|
hdma1_stream2.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
|
hdma1_stream2.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
hdma1_stream2.Init.MemInc = DMA_MINC_ENABLE;
|
|
hdma1_stream2.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
hdma1_stream2.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
hdma1_stream2.Init.Mode = DMA_NORMAL;
|
|
hdma1_stream2.Init.Priority = DMA_PRIORITY_LOW;
|
|
hdma1_stream2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
if (HAL_DMA_Init(&hdma1_stream2) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
__HAL_LINKDMA(&huart4, hdmarx, hdma1_stream2);
|
|
|
|
/* UART4_TX Init */
|
|
hdma1_stream4.Instance = DMA1_Stream4;
|
|
hdma1_stream4.Init.Channel = DMA_CHANNEL_4;
|
|
hdma1_stream4.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
|
hdma1_stream4.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
hdma1_stream4.Init.MemInc = DMA_MINC_ENABLE;
|
|
hdma1_stream4.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
hdma1_stream4.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
hdma1_stream4.Init.Mode = DMA_NORMAL;
|
|
hdma1_stream4.Init.Priority = DMA_PRIORITY_LOW;
|
|
hdma1_stream4.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
|
if (HAL_DMA_Init(&hdma1_stream4) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
__HAL_LINKDMA(&huart4, hdmatx, hdma1_stream4);
|
|
}
|
|
|
|
void AppHal::MX_I2C1_Init(void) {
|
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
__HAL_RCC_I2C1_CLK_ENABLE();
|
|
|
|
hi2c1.Instance = I2C1;
|
|
hi2c1.Init.ClockSpeed = 400000;
|
|
// hi2c1.Init.ClockSpeed = 1000000;
|
|
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
|
hi2c1.Init.OwnAddress1 = 0;
|
|
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
|
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
|
hi2c1.Init.OwnAddress2 = 0;
|
|
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
|
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
|
if (HAL_I2C_Init(&hi2c1) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
|
|
/**I2C1 GPIO Configuration
|
|
PB8 ------> I2C1_SCL
|
|
PB9 ------> I2C1_SDA
|
|
*/
|
|
GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
}
|
|
void AppHal::tmc_spi_init() {
|
|
#if (MOTOR_SPI_INDEX == 1)
|
|
|
|
__HAL_RCC_SPI1_CLK_ENABLE();
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
|
|
static_assert(&MOTOR_SPI_INS == &hspi1);
|
|
|
|
hspi1.Instance = SPI1;
|
|
hspi1.Init.Mode = SPI_MODE_MASTER;
|
|
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
|
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
|
|
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
|
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
|
hspi1.Init.NSS = SPI_NSS_SOFT;
|
|
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
|
|
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
|
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
|
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
|
hspi1.Init.CRCPolynomial = 10;
|
|
if (HAL_SPI_Init(&hspi1) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
static_assert(MOTOR_SPI_SCK == PA5);
|
|
static_assert(MOTOR_SPI_SDO == PA6);
|
|
static_assert(MOTOR_SPI_SDI == PA7);
|
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
|
|
#else
|
|
#error "MOTOR_SPI_INDEX not supported"
|
|
#endif
|
|
}
|
|
|
|
void AppHal::rtc_init() {
|
|
RTC_TimeTypeDef sTime = {0};
|
|
RTC_DateTypeDef sDate = {0};
|
|
|
|
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
|
|
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
|
|
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
|
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
__HAL_RCC_RTC_ENABLE();
|
|
|
|
/** Initialize RTC Only
|
|
*/
|
|
hrtc.Instance = RTC;
|
|
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
|
|
hrtc.Init.AsynchPrediv = 127;
|
|
hrtc.Init.SynchPrediv = 255;
|
|
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
|
|
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
|
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
|
if (HAL_RTC_Init(&hrtc) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
/** Initialize RTC and set the Time and Date
|
|
*/
|
|
sTime.Hours = 0x0;
|
|
sTime.Minutes = 0x0;
|
|
sTime.Seconds = 0x0;
|
|
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
|
|
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
|
|
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
sDate.WeekDay = 0x01;
|
|
sDate.Month = 0x1;
|
|
sDate.Date = 0x1;
|
|
sDate.Year = 0x24;
|
|
|
|
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
}
|
|
|
|
void AppHal::usb_init() {
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
/**USB_OTG_FS GPIO Configuration
|
|
PA11 ------> USB_OTG_FS_DM
|
|
PA12 ------> USB_OTG_FS_DP
|
|
*/
|
|
GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
|
|
__HAL_RCC_USB_OTG_FS_CLK_ENABLE();
|
|
|
|
hhcd_USB_OTG_FS.Instance = USB_OTG_FS;
|
|
hhcd_USB_OTG_FS.Init.Host_channels = 8;
|
|
hhcd_USB_OTG_FS.Init.speed = HCD_SPEED_FULL;
|
|
hhcd_USB_OTG_FS.Init.dma_enable = DISABLE;
|
|
hhcd_USB_OTG_FS.Init.phy_itface = HCD_PHY_EMBEDDED;
|
|
hhcd_USB_OTG_FS.Init.Sof_enable = DISABLE;
|
|
if (HAL_HCD_Init(&hhcd_USB_OTG_FS) != HAL_OK) {
|
|
Error_Handler();
|
|
}
|
|
|
|
#if 0
|
|
__HAL_RCC_USB_OTG_FS_CLK_DISABLE();
|
|
/**USB_OTG_FS GPIO Configuration
|
|
PA11 ------> USB_OTG_FS_DM
|
|
PA12 ------> USB_OTG_FS_DP
|
|
*/
|
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
|
|
#endif
|
|
}
|