From 379255caf7cce3a7f83a6861c5e2c7eca6534398 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Fri, 25 Apr 2025 23:02:37 +0200 Subject: [PATCH] uart config without HAL --- Inc/main.h | 3 +- Inc/stm32g0xx_hal_conf.h | 2 +- Inc/stm32g0xx_it.h | 2 - Makefile | 6 +-- Parafraktor.ioc | 47 ++++--------------- Src/main.c | 117 ++++++++++++++++------------------------------- Src/stm32g0xx_hal_msp.c | 97 --------------------------------------- Src/stm32g0xx_it.c | 31 +------------ 8 files changed, 54 insertions(+), 251 deletions(-) diff --git a/Inc/main.h b/Inc/main.h index 72e8727..db6aa74 100644 --- a/Inc/main.h +++ b/Inc/main.h @@ -41,7 +41,8 @@ extern "C" { /* Exported constants --------------------------------------------------------*/ /* USER CODE BEGIN EC */ - +#define BUFFER_SIZE 8 +extern uint8_t rxBuffer[BUFFER_SIZE]; /* USER CODE END EC */ /* Exported macro ------------------------------------------------------------*/ diff --git a/Inc/stm32g0xx_hal_conf.h b/Inc/stm32g0xx_hal_conf.h index 9be5050..4df19d4 100644 --- a/Inc/stm32g0xx_hal_conf.h +++ b/Inc/stm32g0xx_hal_conf.h @@ -55,7 +55,7 @@ extern "C" { /* #define HAL_SMBUS_MODULE_ENABLED */ /* #define HAL_SPI_MODULE_ENABLED */ /* #define HAL_TIM_MODULE_ENABLED */ -#define HAL_UART_MODULE_ENABLED +/* #define HAL_UART_MODULE_ENABLED */ /* #define HAL_USART_MODULE_ENABLED */ /* #define HAL_WWDG_MODULE_ENABLED */ #define HAL_GPIO_MODULE_ENABLED diff --git a/Inc/stm32g0xx_it.h b/Inc/stm32g0xx_it.h index 751cc13..5713df9 100644 --- a/Inc/stm32g0xx_it.h +++ b/Inc/stm32g0xx_it.h @@ -51,8 +51,6 @@ void HardFault_Handler(void); void SVC_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); -void DMA1_Channel1_IRQHandler(void); -void DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/Makefile b/Makefile index 6515987..a9afc44 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [4.2.0-B44] date: [Thu Apr 24 03:11:06 CEST 2025] +# File automatically-generated by tool: [projectgenerator] version: [4.2.0-B44] date: [Fri Apr 25 22:56:53 CEST 2025] ########################################################################################################################## # ------------------------------------------------ @@ -58,9 +58,7 @@ Drivers/STM32G0xx_HAL_Driver/Src/stm32g0xx_hal_exti.c \ Drivers/RTT/RTT/SEGGER_RTT.c \ Drivers/RTT/RTT/SEGGER_RTT_printf.c \ Drivers/RTT/Syscalls/SEGGER_RTT_Syscalls_GCC.c \ -Src/system_stm32g0xx.c \ -Drivers/STM32G0xx_HAL_Driver/Src/stm32g0xx_hal_uart.c \ -Drivers/STM32G0xx_HAL_Driver/Src/stm32g0xx_hal_uart_ex.c +Src/system_stm32g0xx.c # ASM sources ASM_SOURCES = \ diff --git a/Parafraktor.ioc b/Parafraktor.ioc index 3b9485c..2a9cfea 100644 --- a/Parafraktor.ioc +++ b/Parafraktor.ioc @@ -2,61 +2,33 @@ CAD.formats= CAD.pinconfig= CAD.provider= -Dma.Request0=USART1_RX -Dma.RequestsNb=1 -Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY -Dma.USART1_RX.0.EventEnable=DISABLE -Dma.USART1_RX.0.Instance=DMA1_Channel1 -Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE -Dma.USART1_RX.0.Mode=DMA_NORMAL -Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE -Dma.USART1_RX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING -Dma.USART1_RX.0.Priority=DMA_PRIORITY_LOW -Dma.USART1_RX.0.RequestNumber=1 -Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber -Dma.USART1_RX.0.SignalID=NONE -Dma.USART1_RX.0.SyncEnable=DISABLE -Dma.USART1_RX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT -Dma.USART1_RX.0.SyncRequestNumber=1 -Dma.USART1_RX.0.SyncSignalID=NONE File.Version=6 GPIO.groupedBy= KeepUserPlacement=false Mcu.CPN=STM32G0B1VET6 Mcu.Family=STM32G0 -Mcu.IP0=DMA -Mcu.IP1=NVIC -Mcu.IP2=RCC -Mcu.IP3=SYS -Mcu.IP4=USART1 -Mcu.IPNb=5 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IPNb=3 Mcu.Name=STM32G0B1V(B-C-E)Tx Mcu.Package=LQFP100 Mcu.Pin0=PF0-OSC_IN (PF0) Mcu.Pin1=PF1-OSC_OUT (PF1) -Mcu.Pin2=PC4 -Mcu.Pin3=PC5 -Mcu.Pin4=VP_SYS_VS_Systick -Mcu.Pin5=VP_SYS_VS_DBSignals -Mcu.PinsNb=6 +Mcu.Pin2=VP_SYS_VS_Systick +Mcu.Pin3=VP_SYS_VS_DBSignals +Mcu.PinsNb=4 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32G0B1VETx MxCube.Version=6.10.0 MxDb.Version=DB.6.0.100 -NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:true\:false\:true\:false -PC4.Mode=Asynchronous -PC4.Signal=USART1_TX -PC5.Mode=Asynchronous -PC5.Signal=USART1_RX PF0-OSC_IN\ (PF0).Mode=HSE-External-Oscillator PF0-OSC_IN\ (PF0).Signal=RCC_OSC_IN PF1-OSC_OUT\ (PF1).Mode=HSE-External-Oscillator @@ -92,7 +64,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true RCC.ADCFreq_Value=32000000 RCC.AHBFreq_Value=32000000 RCC.APBFreq_Value=32000000 @@ -136,9 +108,6 @@ RCC.USART3Freq_Value=32000000 RCC.USBFreq_Value=48000000 RCC.VCOInputFreq_Value=8000000 RCC.VCOOutputFreq_Value=64000000 -USART1.BaudRate=250000 -USART1.IPParameters=VirtualMode-Asynchronous,BaudRate -USART1.VirtualMode-Asynchronous=VM_ASYNC VP_SYS_VS_DBSignals.Mode=DisableDeadBatterySignals VP_SYS_VS_DBSignals.Signal=SYS_VS_DBSignals VP_SYS_VS_Systick.Mode=SysTick diff --git a/Src/main.c b/Src/main.c index bdba484..806c68a 100644 --- a/Src/main.c +++ b/Src/main.c @@ -23,7 +23,7 @@ /* USER CODE BEGIN Includes */ #include "SEGGER_RTT.h" #include "stm32g0b1xx.h" -#include "uart.h" +#include "stm32g0xx_hal_cortex.h" #include #include /* USER CODE END Includes */ @@ -44,8 +44,6 @@ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ -UART_HandleTypeDef huart1; -DMA_HandleTypeDef hdma_usart1_rx; /* USER CODE BEGIN PV */ @@ -54,16 +52,33 @@ DMA_HandleTypeDef hdma_usart1_rx; /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); -static void MX_DMA_Init(void); -static void MX_USART1_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ -#define BUFFER_SIZE 64 +#define BUFFER_SIZE 8 uint8_t rxBuffer[BUFFER_SIZE]; + +void init_UART1(){ + USART1->CR1 &= ~USART_CR1_UE; + RCC->APBENR2 |= RCC_APBENR2_USART1EN; + RCC->IOPENR |= RCC_IOPENR_GPIOCEN; + + GPIOC->MODER &= ~GPIO_MODER_MODE5; // Alternate function mode on RX pin + GPIOC->MODER |= GPIO_MODER_MODE5_1; + GPIOC->AFR[0] &= GPIO_AFRL_AFSEL5; + GPIOC->AFR[0] |= 1 << GPIO_AFRL_AFSEL5_Pos; + + USART1->BRR = 128; // 32000000รท250000 + USART1->CR3 |= USART_CR3_EIE; + USART1->CR1 = USART_CR1_RE; + USART1->CR1 |= USART_CR1_UE; + + HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART1_IRQn); +} /* USER CODE END 0 */ /** @@ -95,17 +110,31 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); - MX_DMA_Init(); - MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ - HAL_UART_Receive_DMA(&huart1, rxBuffer, BUFFER_SIZE); + init_UART1(); + + printf("CR1 init: 0x%02lX\n", USART1->CR1 ); + printf("CR2 init: 0x%02lX\n", USART1->CR2 ); + printf("CR3 init: 0x%02lX\n", USART1->CR3 ); + printf("BRR init: 0x%02lX\n", USART1->BRR ); + printf("GTPR init: 0x%02lX\n", USART1->GTPR ); + printf("RTOR init: 0x%02lX\n", USART1->RTOR ); + printf("RQR init: 0x%02lX\n", USART1->RQR ); + printf("ISR init: 0x%02lX\n", USART1->ISR ); + printf("ICR init: 0x%02lX\n", USART1->ICR ); + printf("RDR init: 0x%02lX\n", USART1->RDR ); + printf("TDR init: 0x%02lX\n", USART1->TDR ); + printf("PRESC init: 0x%02lX\n", USART1->PRESC); + /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ + //HAL_UART_Receive_DMA(&huart1, rxBuffer, BUFFER_SIZE); while (1) { - printf("buf: %s\n", rxBuffer); + if(USART1->ISR & USART_ISR_RXNE_RXFNE) + printf("char: '%c'\n", USART1->RDR); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ @@ -158,73 +187,6 @@ void SystemClock_Config(void) } /** - * @brief USART1 Initialization Function - * @param None - * @retval None - */ -static void MX_USART1_UART_Init(void) -{ - - /* USER CODE BEGIN USART1_Init 0 */ - - /* USER CODE END USART1_Init 0 */ - - /* USER CODE BEGIN USART1_Init 1 */ - - /* USER CODE END USART1_Init 1 */ - huart1.Instance = USART1; - huart1.Init.BaudRate = 250000; - 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; - huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; - huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; - if (HAL_UART_Init(&huart1) != HAL_OK) - { - Error_Handler(); - } - if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) - { - Error_Handler(); - } - if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) - { - Error_Handler(); - } - if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN USART1_Init 2 */ - - /* USER CODE END USART1_Init 2 */ - -} - -/** - * Enable DMA controller clock - */ -static void MX_DMA_Init(void) -{ - - /* DMA controller clock enable */ - __HAL_RCC_DMA1_CLK_ENABLE(); - - /* DMA interrupt init */ - /* DMA1_Channel1_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); - /* DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn); - -} - -/** * @brief GPIO Initialization Function * @param None * @retval None @@ -236,7 +198,6 @@ static void MX_GPIO_Init(void) /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); /* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */ diff --git a/Src/stm32g0xx_hal_msp.c b/Src/stm32g0xx_hal_msp.c index edb1221..ee9c65d 100644 --- a/Src/stm32g0xx_hal_msp.c +++ b/Src/stm32g0xx_hal_msp.c @@ -24,7 +24,6 @@ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ -extern DMA_HandleTypeDef hdma_usart1_rx; /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ @@ -82,102 +81,6 @@ void HAL_MspInit(void) /* USER CODE END MspInit 1 */ } -/** -* @brief UART MSP Initialization -* This function configures the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspInit(UART_HandleTypeDef* huart) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - if(huart->Instance==USART1) - { - /* USER CODE BEGIN USART1_MspInit 0 */ - - /* USER CODE END USART1_MspInit 0 */ - - /** Initializes the peripherals clocks - */ - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; - PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } - - /* Peripheral clock enable */ - __HAL_RCC_USART1_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**USART1 GPIO Configuration - PC4 ------> USART1_TX - PC5 ------> USART1_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF1_USART1; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* USART1 DMA Init */ - /* USART1_RX Init */ - hdma_usart1_rx.Instance = DMA1_Channel1; - hdma_usart1_rx.Init.Request = DMA_REQUEST_USART1_RX; - hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_usart1_rx.Init.Mode = DMA_NORMAL; - hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; - if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx); - - /* USER CODE BEGIN USART1_MspInit 1 */ - - /* USER CODE END USART1_MspInit 1 */ - } - -} - -/** -* @brief UART MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) -{ - if(huart->Instance==USART1) - { - /* USER CODE BEGIN USART1_MspDeInit 0 */ - - /* USER CODE END USART1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART1_CLK_DISABLE(); - - /**USART1 GPIO Configuration - PC4 ------> USART1_TX - PC5 ------> USART1_RX - */ - HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4|GPIO_PIN_5); - - /* USART1 DMA DeInit */ - HAL_DMA_DeInit(huart->hdmarx); - /* USER CODE BEGIN USART1_MspDeInit 1 */ - - /* USER CODE END USART1_MspDeInit 1 */ - } - -} - /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Src/stm32g0xx_it.c b/Src/stm32g0xx_it.c index 4ae547a..eee2e64 100644 --- a/Src/stm32g0xx_it.c +++ b/Src/stm32g0xx_it.c @@ -22,6 +22,7 @@ #include "stm32g0xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "stdio.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -55,7 +56,7 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ -extern DMA_HandleTypeDef hdma_usart1_rx; + /* USER CODE BEGIN EV */ /* USER CODE END EV */ @@ -140,34 +141,6 @@ void SysTick_Handler(void) /* please refer to the startup file (startup_stm32g0xx.s). */ /******************************************************************************/ -/** - * @brief This function handles DMA1 channel 1 interrupt. - */ -void DMA1_Channel1_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */ - - /* USER CODE END DMA1_Channel1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart1_rx); - /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */ - - /* USER CODE END DMA1_Channel1_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 Ch4 to Ch7, DMA2 Ch1 to Ch5 and DMAMUX1 Overrun Interrupts. - */ -void DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 0 */ - - /* USER CODE END DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 0 */ - - /* USER CODE BEGIN DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 1 */ - - /* USER CODE END DMA1_Ch4_7_DMA2_Ch1_5_DMAMUX1_OVR_IRQn 1 */ -} - /* USER CODE BEGIN 1 */ /* USER CODE END 1 */