update bsp for f7

This commit is contained in:
hathach
2024-11-06 21:46:18 +07:00
parent fe79a93594
commit e5c26924ed
21 changed files with 362 additions and 184 deletions

View File

@@ -31,28 +31,53 @@
extern "C" {
#endif
#define LED_PORT GPIOB
#define LED_PIN GPIO_PIN_1
#define LED_STATE_ON 1
#define BUTTON_PORT GPIOA
#define BUTTON_PIN GPIO_PIN_0
#define BUTTON_STATE_ACTIVE 1
#define UART_DEV USART6
#define UART_CLK_EN __HAL_RCC_USART6_CLK_ENABLE
#define UART_GPIO_AF GPIO_AF8_USART6
#define UART_TX_PORT GPIOC
#define UART_TX_PIN GPIO_PIN_6
#define UART_RX_PORT GPIOC
#define UART_RX_PIN GPIO_PIN_7
// VBUS Sense detection
#define OTG_FS_VBUS_SENSE 1
#define OTG_HS_VBUS_SENSE 0
#define PINID_LED 0
#define PINID_BUTTON 1
#define PINID_UART_TX 2
#define PINID_UART_RX 3
#define PINID_VBUS0_EN 4
#define PINID_VBUS1_EN 5
static board_pindef_t board_pindef[] = {
{ // LED
.port = GPIOB,
.pin_init = { .Pin = GPIO_PIN_1, .Mode = GPIO_MODE_OUTPUT_PP, .Pull = GPIO_PULLDOWN, .Speed = GPIO_SPEED_HIGH, .Alternate = 0 },
.active_state = 1
},
{ // Button
.port = GPIOA,
.pin_init = { .Pin = GPIO_PIN_0, .Mode = GPIO_MODE_INPUT, .Pull = GPIO_PULLDOWN, .Speed = GPIO_SPEED_HIGH, .Alternate = 0 },
.active_state = 1
},
{ // UART TX
.port = GPIOC,
.pin_init = { .Pin = GPIO_PIN_6, .Mode = GPIO_MODE_AF_PP, .Pull = GPIO_PULLUP, .Speed = GPIO_SPEED_HIGH, .Alternate = GPIO_AF8_USART6 },
.active_state = 0
},
{ // UART RX
.port = GPIOC,
.pin_init = { .Pin = GPIO_PIN_7, .Mode = GPIO_MODE_AF_PP, .Pull = GPIO_PULLUP, .Speed = GPIO_SPEED_HIGH, .Alternate = GPIO_AF8_USART6 },
.active_state = 0
},
{ // VBUS0 EN
.port = GPIOG,
.pin_init = { .Pin = GPIO_PIN_8, .Mode = GPIO_MODE_OUTPUT_OD, .Pull = GPIO_NOPULL, .Speed = GPIO_SPEED_HIGH, .Alternate = 0 },
.active_state = 0
},
{ // VBUS1 EN
.port = GPIOH,
.pin_init = { .Pin = GPIO_PIN_12, .Mode = GPIO_MODE_OUTPUT_PP, .Pull = GPIO_NOPULL, .Speed = GPIO_SPEED_HIGH, .Alternate = 0 },
.active_state = 1
},
};
//--------------------------------------------------------------------+
// RCC Clock
//--------------------------------------------------------------------+
@@ -90,46 +115,12 @@ static inline void board_clock_init(void) {
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);
UART_CLK_EN();
}
//static inline void board_vbus_sense_init(void)
//{
//
//}
typedef struct {
GPIO_TypeDef* port;
GPIO_InitTypeDef pin_init;
bool active_state;
} board_pindef_t;
static board_pindef_t vbus_pindef[] = {
{
.port = GPIOG,
.pin_init = {
.Pin = GPIO_PIN_8, .Mode = GPIO_MODE_OUTPUT_OD, .Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_HIGH, .Alternate = 0
},
.active_state = false
},
{
.port = GPIOH,
.pin_init = {
.Pin = GPIO_PIN_12, .Mode = GPIO_MODE_OUTPUT_PP, .Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_HIGH, .Alternate = 0
},
.active_state = true
},
};
void board_vbus_set(uint8_t rhport, bool state) {
static bool pin_inited[2] = { false, false };
board_pindef_t* pindef = &vbus_pindef[rhport];
if (!pin_inited[rhport]) {
HAL_GPIO_Init(pindef->port, &pindef->pin_init);
pin_inited[rhport] = true;
}
static inline void board_vbus_set(uint8_t rhport, bool state) {
board_pindef_t* pindef = &board_pindef[rhport ? PINID_VBUS1_EN : PINID_VBUS0_EN];
HAL_GPIO_WritePin(pindef->port, pindef->pin_init.Pin, state == pindef->active_state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}