diff --git a/bsp/stm32g070cb/Booter/main.c b/bsp/stm32g070cb/Booter/main.c index fd8539f7e..99dcffbe3 100644 --- a/bsp/stm32g070cb/Booter/main.c +++ b/bsp/stm32g070cb/Booter/main.c @@ -49,44 +49,10 @@ PikaObj *pikaMain; /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); -volatile static char rx_char = 0; -char UART1_RxBuff[RX_BUFF_LENGTH] = {0}; -uint16_t UART1_RXBuff_offset = 0; -__attribute__((weak)) void __PIKA_USART1_IRQHandler(char rx_char) {} -void USART1_IRQHandler(void){ - if (LL_USART_IsActiveFlag_RXNE(USART1)) { - rx_char = LL_USART_ReceiveData8(USART1); - __PIKA_USART1_IRQHandler(rx_char); - /* clear buff when overflow */ - if (UART1_RXBuff_offset >= RX_BUFF_LENGTH) { - UART1_RXBuff_offset = 0; - memset(UART1_RxBuff, 0, sizeof(UART1_RxBuff)); - } - /* recive char */ - UART1_RxBuff[UART1_RXBuff_offset] = rx_char; - UART1_RXBuff_offset++; - if ('\n' == rx_char) { - /* handle python script download */ - if (STM32_Code_reciveHandler(UART1_RxBuff, UART1_RXBuff_offset)) { - goto line_exit; - } - line_exit: - UART1_RXBuff_offset = 0; - memset(UART1_RxBuff, 0, sizeof(UART1_RxBuff)); - return; - } - } -} +volatile static char g_rx_char = 0; +char CONSOLE_RxBuff[RX_BUFF_LENGTH] = {0}; +uint16_t CONSOLE_RxBuff_offset = 0; -/* support pikaScript Shell */ -char __platform_getchar(){ - char res = 0; - while(rx_char == 0){ - }; - res = rx_char; - rx_char = 0; - return res; -} int64_t pika_platform_getTick(void){ @@ -105,6 +71,147 @@ void pika_platform_sleep_s(uint32_t s){ extern PikaObj *__pikaMain; + +// 选择使用的串口 +#define USING_CONSOLE_USART1 1 +// #define USING_CONSOLE_USART3 1 +// #define USING_CONSOLE_USART4 1 + +// 检查是否有选择的串口,如果没有定义任何一个,则报错 +#if !USING_CONSOLE_USART1 && !USING_CONSOLE_USART3 && !USING_CONSOLE_USART4 +#error "Please define a console USART (1, 3, or 4) to use by setting the USING_CONSOLE_USARTX to 1." +#endif + +#if (USING_CONSOLE_USART1) +#define USART_CONSOLE USART1 +#define USART_CONSOLE_IRQn USART1_IRQn +#define USART_CONSOLE_GPIO GPIOA +#define USART_CONSOLE_PIN_TX LL_GPIO_PIN_9 +#define USART_CONSOLE_PIN_RX LL_GPIO_PIN_10 +#define USART_CONSOLE_AF LL_GPIO_AF_1 +#define USART_CONSOLE_CLK_ENABLE() LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1) +#define USART_CONSOLE_GPIO_CLK_ENABLE() LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA) +#define USART_CONSOLE_IRQHandler USART1_IRQHandler + +#elif (USING_CONSOLE_USART3) +#define USART_CONSOLE USART3 +#define USART_CONSOLE_IRQn USART3_4_IRQn +#define USART_CONSOLE_GPIO GPIOD +#define USART_CONSOLE_PIN_TX LL_GPIO_PIN_8 +#define USART_CONSOLE_PIN_RX LL_GPIO_PIN_9 +#define USART_CONSOLE_AF LL_GPIO_AF_0 +#define USART_CONSOLE_CLK_ENABLE() LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3) +#define USART_CONSOLE_GPIO_CLK_ENABLE() LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOD) +#define USART_CONSOLE_IRQHandler USART3_4_IRQHandler + +#elif (USING_CONSOLE_USART4) +#define USART_CONSOLE USART4 +#define USART_CONSOLE_IRQn USART3_4_IRQn +#define USART_CONSOLE_GPIO GPIOC +#define USART_CONSOLE_PIN_TX LL_GPIO_PIN_10 +#define USART_CONSOLE_PIN_RX LL_GPIO_PIN_11 +#define USART_CONSOLE_AF LL_GPIO_AF_0 +#define USART_CONSOLE_CLK_ENABLE() LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART4) +#define USART_CONSOLE_GPIO_CLK_ENABLE() LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOC) +#define USART_CONSOLE_IRQHandler USART3_4_IRQHandler + +#endif + +__attribute__((weak)) void __PIKA_USART_IRQHandler(USART_TypeDef* USARTx, char rx_char) {}; + +void USART_CONSOLE_IRQHandler(void) { + if (LL_USART_IsActiveFlag_RXNE(USART_CONSOLE)) { + g_rx_char = LL_USART_ReceiveData8(USART_CONSOLE); + __PIKA_USART_IRQHandler(USART_CONSOLE, g_rx_char); + /* clear buff when overflow */ + if (CONSOLE_RxBuff_offset >= RX_BUFF_LENGTH) { + CONSOLE_RxBuff_offset = 0; + memset(CONSOLE_RxBuff, 0, sizeof(CONSOLE_RxBuff)); + } + /* recive char */ + CONSOLE_RxBuff[CONSOLE_RxBuff_offset] = g_rx_char; + CONSOLE_RxBuff_offset++; + if ('\n' == g_rx_char || '\r' == g_rx_char) { + /* handle python script download */ + if (STM32_Code_reciveHandler(CONSOLE_RxBuff, CONSOLE_RxBuff_offset)) { + goto line_exit; + } + line_exit: + CONSOLE_RxBuff_offset = 0; + memset(CONSOLE_RxBuff, 0, sizeof(CONSOLE_RxBuff)); + return; + } + } +} + +/* support printf */ +void HARDWARE_PRINTF_Init(void) { + LL_USART_InitTypeDef USART_InitStruct = {0}; + LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; + + // Enable peripheral and GPIO clocks + USART_CONSOLE_CLK_ENABLE(); + USART_CONSOLE_GPIO_CLK_ENABLE(); + + // Configure USART GPIO + GPIO_InitStruct.Pin = USART_CONSOLE_PIN_TX; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + GPIO_InitStruct.Alternate = USART_CONSOLE_AF; + LL_GPIO_Init(USART_CONSOLE_GPIO, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = USART_CONSOLE_PIN_RX; + LL_GPIO_Init(USART_CONSOLE_GPIO, &GPIO_InitStruct); + + // USART interrupt Init + NVIC_SetPriority(USART_CONSOLE_IRQn, 0); + NVIC_EnableIRQ(USART_CONSOLE_IRQn); + + USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1; + USART_InitStruct.BaudRate = 115200; + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; + USART_InitStruct.StopBits = LL_USART_STOPBITS_1; + USART_InitStruct.Parity = LL_USART_PARITY_NONE; + USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; + USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; + USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; + LL_USART_Init(USART_CONSOLE, &USART_InitStruct); + LL_USART_SetTXFIFOThreshold(USART_CONSOLE, LL_USART_FIFOTHRESHOLD_1_8); + LL_USART_SetRXFIFOThreshold(USART_CONSOLE, LL_USART_FIFOTHRESHOLD_1_8); + LL_USART_DisableFIFO(USART_CONSOLE); + LL_USART_ConfigAsyncMode(USART_CONSOLE); + LL_USART_Enable(USART_CONSOLE); + + // Polling USART initialisation + while ((!(LL_USART_IsActiveFlag_TEACK(USART_CONSOLE))) || + (!(LL_USART_IsActiveFlag_REACK(USART_CONSOLE)))) { + } + + // Enable interrupt + LL_USART_EnableIT_RXNE(USART_CONSOLE); + LL_USART_EnableIT_PE(USART_CONSOLE); +} + +int fputc(int ch, FILE* f) { + LL_USART_TransmitData8(USART_CONSOLE, ch); + while (LL_USART_IsActiveFlag_TC(USART_CONSOLE) != 1) + ; + return ch; +} + +/* support pikaScript Shell */ +char __platform_getchar(){ + char res = 0; + while(g_rx_char == 0){ + }; + res = g_rx_char; + g_rx_char = 0; + return res; +} + + int main(void){ HAL_Init(); SystemClock_Config(); diff --git a/bsp/stm32g070cb/Booter/pika_config.c b/bsp/stm32g070cb/Booter/pika_config.c index bae7eb210..cbfe63be6 100644 --- a/bsp/stm32g070cb/Booter/pika_config.c +++ b/bsp/stm32g070cb/Booter/pika_config.c @@ -12,69 +12,6 @@ void __platform_enable_irq_handle(){ } -/* support printf */ -void HARDWARE_PRINTF_Init(void) { - LL_USART_InitTypeDef USART_InitStruct = {0}; - LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; - /* Peripheral clock enable */ - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1); - - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); - /**USART1 GPIO Configuration - PA9 ------> USART1_TX - PA10 ------> USART1_RX - */ - GPIO_InitStruct.Pin = LL_GPIO_PIN_9; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; - GPIO_InitStruct.Alternate = LL_GPIO_AF_1; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = LL_GPIO_PIN_10; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; - GPIO_InitStruct.Alternate = LL_GPIO_AF_1; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USART1 interrupt Init */ - NVIC_SetPriority(USART1_IRQn, 0); - NVIC_EnableIRQ(USART1_IRQn); - - USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1; - USART_InitStruct.BaudRate = 115200; - USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; - USART_InitStruct.StopBits = LL_USART_STOPBITS_1; - USART_InitStruct.Parity = LL_USART_PARITY_NONE; - USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; - USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; - USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; - LL_USART_Init(USART1, &USART_InitStruct); - LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8); - LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8); - LL_USART_DisableFIFO(USART1); - LL_USART_ConfigAsyncMode(USART1); - LL_USART_Enable(USART1); - - /* Polling USART1 initialisation */ - while ((!(LL_USART_IsActiveFlag_TEACK(USART1))) || - (!(LL_USART_IsActiveFlag_REACK(USART1)))) { - } - - /* open interrupt */ - LL_USART_EnableIT_RXNE(USART1); - LL_USART_EnableIT_PE(USART1); -} - -int fputc(int ch, FILE* f) { - LL_USART_TransmitData8(USART1, ch); - while (LL_USART_IsActiveFlag_TC(USART1) != 1) - ; - return ch; -} /* support delay_us */ diff --git a/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx b/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx index e9cd40a00..e62d179fa 100644 --- a/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx +++ b/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx @@ -340,7 +340,7 @@ USE_FULL_LL_DRIVER, USE_HAL_DRIVER,STM32G070xx - ..\Booter;../Drivers/STM32G0xx_HAL_Driver/Inc;../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32G0xx/Include;../Drivers/CMSIS/Include;..\Drivers\CMSIS\DSP\Include;..\pikascript\pikascript-lib/PikaStdDevice;..\pikascript\pikascript-lib/STM32G0;..\pikascript\pikascript-lib/PikaPiZero;..\pikascript\pikascript-lib/PikaStdLib;..\pikascript\pikascript-api;..\pikascript\pikascript-core + ..\Booter;../Drivers/STM32G0xx_HAL_Driver/Inc;../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32G0xx/Include;../Drivers/CMSIS/Include;..\Drivers\CMSIS\DSP\Include;..\pikascript\pikascript-lib/PikaStdDevice;..\pikascript\pikascript-lib/time;..\pikascript\pikascript-lib/STM32G0;..\pikascript\pikascript-lib/PikaPiZero;..\pikascript\pikascript-lib/PikaStdLib;..\pikascript\pikascript-api;..\pikascript\pikascript-core @@ -714,11 +714,41 @@ 1 ..\pikascript\pikascript-lib/PikaStdDevice/PikaStdDevice_DAC.c + + _time.c + 1 + ..\pikascript\pikascript-lib/time/_time.c + STM32G0_common.c 1 ..\pikascript\pikascript-lib/STM32G0/STM32G0_common.c + + pika_hal_STM32G0_GPIO.c + 1 + ..\pikascript\pikascript-lib/STM32G0/pika_hal_STM32G0_GPIO.c + + + pika_hal_STM32G0_PWM.c + 1 + ..\pikascript\pikascript-lib/STM32G0/pika_hal_STM32G0_PWM.c + + + pika_hal_STM32G0_ADC.c + 1 + ..\pikascript\pikascript-lib/STM32G0/pika_hal_STM32G0_ADC.c + + + pika_hal_STM32G0_UART.c + 1 + ..\pikascript\pikascript-lib/STM32G0/pika_hal_STM32G0_UART.c + + + pika_hal_STM32G0_SPI.c + 1 + ..\pikascript\pikascript-lib/STM32G0/pika_hal_STM32G0_SPI.c + PikaPiZero_RGB.c 1 @@ -814,36 +844,6 @@ 4 ..\pikascript\pikascript-lib/PikaPiZero/RGB_ASM.lib - - _time.c - 1 - ..\pikascript\pikascript-lib\time\_time.c - - - pika_hal_STM32G0_ADC.c - 1 - ..\pikascript\pikascript-lib\STM32G0\pika_hal_STM32G0_ADC.c - - - pika_hal_STM32G0_GPIO.c - 1 - ..\pikascript\pikascript-lib\STM32G0\pika_hal_STM32G0_GPIO.c - - - pika_hal_STM32G0_SPI.c - 1 - ..\pikascript\pikascript-lib\STM32G0\pika_hal_STM32G0_SPI.c - - - pika_hal_STM32G0_PWM.c - 1 - ..\pikascript\pikascript-lib\STM32G0\pika_hal_STM32G0_PWM.c - - - pika_hal_STM32G0_UART.c - 1 - ..\pikascript\pikascript-lib\STM32G0\pika_hal_STM32G0_UART.c - diff --git a/bsp/stm32g070cb/pikascript/requestment.txt b/bsp/stm32g070cb/pikascript/requestment.txt index 8c9bac41e..d167144d1 100644 --- a/bsp/stm32g070cb/pikascript/requestment.txt +++ b/bsp/stm32g070cb/pikascript/requestment.txt @@ -1,6 +1,6 @@ pikascript-core==v1.12.0 PikaStdLib==v1.12.0 PikaStdDevice==v2.3.0 -STM32G0==v2.0.0 +STM32G0==v2.1.0 PikaPiZero==v1.4.0 -time==v0.1.0 \ No newline at end of file +time==v0.1.0