From 308303448132f5e83e94f1cafc1efa2760470fe6 Mon Sep 17 00:00:00 2001 From: pikastech Date: Sat, 11 Dec 2021 21:53:33 +0800 Subject: [PATCH] update g070cb --- bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx | 167 ++++++++++++++++++++- bsp/stm32g070cb/pikascript/main.py | 1 + bsp/stm32g070cb/pikascript/requestment.txt | 4 +- package/STM32G070CBBooter/main.c | 2 +- package/STM32G070CBBooter/main.h | 13 +- package/STM32G070CBBooter/pika_config.c | 98 ++++++++++++ package/STM32G070CBBooter/pika_config.h | 64 ++++++++ 7 files changed, 345 insertions(+), 4 deletions(-) create mode 100644 package/STM32G070CBBooter/pika_config.c create mode 100644 package/STM32G070CBBooter/pika_config.h diff --git a/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx b/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx index 23bfe08d2..4fac22b31 100644 --- a/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx +++ b/bsp/stm32g070cb/MDK-ARM/stm32g070.uvprojx @@ -338,7 +338,7 @@ 0 - USE_HAL_DRIVER,STM32G070xx + USE_FULL_LL_DRIVER, USE_HAL_DRIVER,STM32G070xx ..\pikascript\pikascript-lib\STM32G070CBBooter;../Drivers/STM32G0xx_HAL_Driver/Inc;../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32G0xx/Include;../Drivers/CMSIS/Include;..\pikascript\pikascript-api;..\pikascript\pikascript-core;..\pikascript\pikascript-lib\STM32 @@ -414,6 +414,11 @@ 2 ..\pikascript\pikascript-lib\STM32G070CBBooter\startup_stm32g070xx.s + + pika_config.c + 1 + ..\pikascript\pikascript-lib\STM32G070CBBooter\pika_config.c + @@ -519,6 +524,31 @@ 1 ..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c + + stm32g0xx_ll_gpio.c + 1 + ..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_gpio.c + + + stm32g0xx_ll_usart.c + 1 + ..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_usart.c + + + stm32g0xx_ll_rcc.c + 1 + ..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_rcc.c + + + stm32g0xx_ll_adc.c + 1 + ..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_adc.c + + + stm32g0xx_ll_tim.c + 1 + ..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_tim.c + @@ -639,6 +669,76 @@ 1 ..\pikascript\pikascript-api\PikaStdLib-api.c + + PikaStdDevice_ADC-api.c + 1 + ..\pikascript\pikascript-api\PikaStdDevice_ADC-api.c + + + PikaStdDevice_GPIO-api.c + 1 + ..\pikascript\pikascript-api\PikaStdDevice_GPIO-api.c + + + PikaStdDevice_IIC-api.c + 1 + ..\pikascript\pikascript-api\PikaStdDevice_IIC-api.c + + + PikaStdDevice_PWM-api.c + 1 + ..\pikascript\pikascript-api\PikaStdDevice_PWM-api.c + + + PikaStdDevice_Time-api.c + 1 + ..\pikascript\pikascript-api\PikaStdDevice_Time-api.c + + + PikaStdDevice_UART-api.c + 1 + ..\pikascript\pikascript-api\PikaStdDevice_UART-api.c + + + STM32G0_ADC-api.c + 1 + ..\pikascript\pikascript-api\STM32G0_ADC-api.c + + + STM32G0_GPIO-api.c + 1 + ..\pikascript\pikascript-api\STM32G0_GPIO-api.c + + + STM32G0_IIC-api.c + 1 + ..\pikascript\pikascript-api\STM32G0_IIC-api.c + + + STM32G0_lowLevel-api.c + 1 + ..\pikascript\pikascript-api\STM32G0_lowLevel-api.c + + + STM32G0_PWM-api.c + 1 + ..\pikascript\pikascript-api\STM32G0_PWM-api.c + + + STM32G0_Time-api.c + 1 + ..\pikascript\pikascript-api\STM32G0_Time-api.c + + + STM32G0_UART-api.c + 1 + ..\pikascript\pikascript-api\STM32G0_UART-api.c + + + STM32G0-api.c + 1 + ..\pikascript\pikascript-api\STM32G0-api.c + @@ -659,6 +759,71 @@ 1 ..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_SysObj.c + + PikaStdDevice_ADC.c + 1 + ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_ADC.c + + + PikaStdDevice_GPIO.c + 1 + ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_GPIO.c + + + PikaStdDevice_IIC.c + 1 + ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_IIC.c + + + PikaStdDevice_PWM.c + 1 + ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_PWM.c + + + PikaStdDevice_Time.c + 1 + ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_Time.c + + + PikaStdDevice_UART.c + 1 + ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_UART.c + + + STM32G0_ADC.c + 1 + ..\pikascript\pikascript-lib\STM32G0\STM32G0_ADC.c + + + STM32G0_common.c + 1 + ..\pikascript\pikascript-lib\STM32G0\STM32G0_common.c + + + STM32G0_GPIO.c + 1 + ..\pikascript\pikascript-lib\STM32G0\STM32G0_GPIO.c + + + STM32G0_IIC.c + 1 + ..\pikascript\pikascript-lib\STM32G0\STM32G0_IIC.c + + + STM32G0_PWM.c + 1 + ..\pikascript\pikascript-lib\STM32G0\STM32G0_PWM.c + + + STM32G0_Time.c + 1 + ..\pikascript\pikascript-lib\STM32G0\STM32G0_Time.c + + + STM32G0_UART.c + 1 + ..\pikascript\pikascript-lib\STM32G0\STM32G0_UART.c + diff --git a/bsp/stm32g070cb/pikascript/main.py b/bsp/stm32g070cb/pikascript/main.py index 3517b7d6e..f5a2a68c5 100644 --- a/bsp/stm32g070cb/pikascript/main.py +++ b/bsp/stm32g070cb/pikascript/main.py @@ -1,4 +1,5 @@ import PikaStdLib +import STM32G0 print('hello pikascript') print('mem used max:') diff --git a/bsp/stm32g070cb/pikascript/requestment.txt b/bsp/stm32g070cb/pikascript/requestment.txt index 6e9966f91..18ed8b06d 100644 --- a/bsp/stm32g070cb/pikascript/requestment.txt +++ b/bsp/stm32g070cb/pikascript/requestment.txt @@ -1,3 +1,5 @@ pikascript-core==v1.2.8 PikaStdLib==v1.2.4 -STM32G070CBBooter==v1.0.0 \ No newline at end of file +STM32G070CBBooter==v1.0.0 +STM32G0==v1.0.3 +PikaStdDevice==v1.4.3 \ No newline at end of file diff --git a/package/STM32G070CBBooter/main.c b/package/STM32G070CBBooter/main.c index cc3e5a649..b7676bb2f 100644 --- a/package/STM32G070CBBooter/main.c +++ b/package/STM32G070CBBooter/main.c @@ -71,7 +71,7 @@ int main(void) /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); - + HARDWARE_PRINTF_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ diff --git a/package/STM32G070CBBooter/main.h b/package/STM32G070CBBooter/main.h index 22443aec4..d3c5886c6 100644 --- a/package/STM32G070CBBooter/main.h +++ b/package/STM32G070CBBooter/main.h @@ -29,7 +29,18 @@ extern "C" { /* Includes ------------------------------------------------------------------*/ #include "stm32g0xx_hal.h" - +#include "stm32g0xx_ll_bus.h" +#include "stm32g0xx_ll_cortex.h" +#include "stm32g0xx_ll_dma.h" +#include "stm32g0xx_ll_exti.h" +#include "stm32g0xx_ll_gpio.h" +#include "stm32g0xx_ll_pwr.h" +#include "stm32g0xx_ll_rcc.h" +#include "stm32g0xx_ll_system.h" +#include "stm32g0xx_ll_tim.h" +#include "stm32g0xx_ll_usart.h" +#include "stm32g0xx_ll_utils.h" +#include "pika_config.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ diff --git a/package/STM32G070CBBooter/pika_config.c b/package/STM32G070CBBooter/pika_config.c new file mode 100644 index 000000000..791841a6d --- /dev/null +++ b/package/STM32G070CBBooter/pika_config.c @@ -0,0 +1,98 @@ +#include "pika_config.h" +#include "main.h" +#include +/* support interrupt */ + +void __platform_disable_irq_handle(){ + __disable_irq(); +} +void __platform_enable_irq_handle(){ + __enable_irq(); +} + + +/* 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 */ + +void delay_us(uint32_t udelay) { + uint32_t startval, tickn, delays, wait; + + startval = SysTick->VAL; + tickn = HAL_GetTick(); + delays = udelay * 64; // delay 1us when delays = 64 + if (delays > startval) { + while (HAL_GetTick() == tickn) { + } + wait = 64000 + startval - delays; + while (wait < SysTick->VAL) { + } + } else { + wait = startval - delays; + while (wait < SysTick->VAL && HAL_GetTick() == tickn) { + } + } +} + diff --git a/package/STM32G070CBBooter/pika_config.h b/package/STM32G070CBBooter/pika_config.h new file mode 100644 index 000000000..b40e11da2 --- /dev/null +++ b/package/STM32G070CBBooter/pika_config.h @@ -0,0 +1,64 @@ +#ifndef __STM32G030_PIKA_PORT__H +#define __STM32G030_PIKA_PORT__H + +#define use_mem_pool 1 + +#include +#include "pikaObj.h" +typedef struct _CodeHeap { + char* content; + uint32_t size; + uint8_t ena; + uint32_t reciveTime; + uint32_t oldSize; +} CodeHeap; + +/* support std lib for stm32 */ +#define delay_ms HAL_Delay +#undef u16 +#undef u8 +#undef u32 +#define u16 uint16_t +#define u8 uint8_t +#define u32 uint32_t + +#define GPIO_Pin_0 GPIO_PIN_0 +#define GPIO_Pin_1 GPIO_PIN_1 +#define GPIO_Pin_2 GPIO_PIN_2 +#define GPIO_Pin_3 GPIO_PIN_3 +#define GPIO_Pin_4 GPIO_PIN_4 +#define GPIO_Pin_5 GPIO_PIN_5 +#define GPIO_Pin_6 GPIO_PIN_6 +#define GPIO_Pin_7 GPIO_PIN_7 +#define GPIO_Pin_8 GPIO_PIN_8 +#define GPIO_Pin_9 GPIO_PIN_9 +#define GPIO_Pin_10 GPIO_PIN_10 +#define GPIO_Pin_11 GPIO_PIN_11 +#define GPIO_Pin_12 GPIO_PIN_12 +#define GPIO_Pin_13 GPIO_PIN_13 +#define GPIO_Pin_14 GPIO_PIN_14 +#define GPIO_Pin_15 GPIO_PIN_15 + +/* support pinrtf */ +void HARDWARE_PRINTF_Init(void); + +/* support write asm to flash */ +#define FLASH_SCRIPT_START_ADDR \ + (FLASH_BASE + ((FLASH_PAGE_NB - 2) * FLASH_PAGE_SIZE)) +#define FLASH_SCRIPT_END_ADDR (FLASH_BASE + FLASH_SIZE - 1) +#define FLASH_PIKA_ASM_START_ADDR FLASH_SCRIPT_START_ADDR +#define FLASH_PIKA_ASM_END_ADDR FLASH_SCRIPT_END_ADDR + +#define RX_BUFF_LENGTH 64 + +/* support download python script by uart1 */ +uint8_t STM32_Code_reciveHandler(char* data, uint32_t rxSize); +void STM32_Code_Init(void); +void STM32_Code_flashHandler(void); + +/* handler for usart1 */ +void __PIKA_USART1_IRQHandler(char rx_char); +#endif + +/* delay_us */ +void delay_us(uint32_t udelay);