Compare commits

..

No commits in common. '5778a375133425cdba0c140531142025751fe233' and 'f5c85f8f3f2d5686b28cd240ce22fd6ee91e3dc8' have entirely different histories.

@ -24,7 +24,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.108480266" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.108480266" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1440555153" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="NUCLEO-F401RE" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1440555153" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="NUCLEO-F401RE" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.735933396" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-F401RE || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F401xE || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F401RETX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.735933396" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-F401RE || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F401xE || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F401RETX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.272603146" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="32" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.272603146" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="84" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1199056163" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/> <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1199056163" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/GNSS_Nucleo}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.68958637" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/> <builder buildPath="${workspace_loc:/GNSS_Nucleo}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.68958637" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1554129155" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1554129155" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
@ -105,7 +105,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1740605827" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1740605827" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.812753682" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="NUCLEO-F401RE" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.812753682" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="NUCLEO-F401RE" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.519568019" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-F401RE || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F401xE || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F401RETX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.519568019" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-F401RE || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F401xE || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F401RETX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.992879542" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="32" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.992879542" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="84" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.684191003" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/> <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.684191003" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/GNSS_Nucleo}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1367961223" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/> <builder buildPath="${workspace_loc:/GNSS_Nucleo}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1367961223" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.2089101508" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.2089101508" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">

@ -74,11 +74,6 @@ void Error_Handler(void);
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
/* LED2 helper accessors (static inline for type-safety and no linker symbol) */
static inline void LED2_Toggle(void) { HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); }
static inline void LED2_On(void) { HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET); }
static inline void LED2_Off(void) { HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET); }
/* USER CODE END Private defines */ /* USER CODE END Private defines */
#ifdef __cplusplus #ifdef __cplusplus

@ -37,7 +37,6 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */ /* USER CODE BEGIN EC */
extern volatile uint32_t SysTickCnt;
/* USER CODE END EC */ /* USER CODE END EC */
@ -58,9 +57,6 @@ void PendSV_Handler(void);
void SysTick_Handler(void); void SysTick_Handler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */
uint32_t SysTimeGetAbs(void);
int32_t SysTimeGetRel(uint32_t tref);
/* USER CODE END EFP */ /* USER CODE END EFP */
#ifdef __cplusplus #ifdef __cplusplus

@ -22,10 +22,8 @@
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "printf.h" #include "printf.h"
#include <stm32f4xx_it.h>
#include <usart2_it.h> #include <usart2_it.h>
#include <usart6_it.h> #include <usart6_it.h>
#include "usart1_it.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@ -71,22 +69,8 @@ static void MX_USART1_UART_Init(void);
/***************************************************************************//** /***************************************************************************//**
* @brief Character send interface for printf function * @brief Character send interface for printf function
*//****************************************************************************/ *//****************************************************************************/
void printf_putc(void *p, char c) { void uart_putc(void *p, char c) {
Usart1_PutByte(c); Usart6_PutByte(c);
}
/***************************************************************************//**
* @brief Check if specified time interval has elapsed
* @param tref Pointer to time reference variable
* @param tcycle Time interval in milliseconds
*//****************************************************************************/
static inline uint32_t TickChk(uint32_t *tref, int_fast16_t tcycle) {
int32_t tdif = SysTickCnt - *tref;
if (tdif >= tcycle) {
*tref += tcycle;
return 1;
}
return 0;
} }
/* USER CODE END 0 */ /* USER CODE END 0 */
@ -127,76 +111,23 @@ int main(void) {
Usart2_Init(); Usart2_Init();
Usart6_Init(); Usart6_Init();
Usart1_Init(); init_printf(NULL, &uart_putc);// connect printf to UART
init_printf(NULL, &printf_putc); printf("Hello world. This is a Nucleo UART and printf sample with IRQ and ring buffer.\n");
printf("Nucleo UART with IRQ and ring buffer\n");
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) { while (1) {
static uint32_t Tick10msRef = 0;
/* per-second and total byte counters */
static uint32_t bytes_2to6 = 0;
static uint32_t bytes_6to2 = 0;
static uint32_t total_2to6 = 0;
static uint32_t total_6to2 = 0;
if (TickChk(&Tick10msRef, 10)) {
}
static uint32_t Tick1secRef = 0;
if (TickChk(&Tick1secRef, 1000)) {
LED2_Toggle();
/* print per-second data rates and cumulative totals */
printf("OUT:%5u IN:%5u B/s (Total:%u/%u)\n", (unsigned) bytes_2to6, (unsigned) bytes_6to2, (unsigned) total_2to6, (unsigned) total_6to2);
/* reset per-second counters */
bytes_2to6 = 0;
bytes_6to2 = 0;
}
int c; int c;
c = Usart1_GetByte();
if (c != -1) { // new incoming data
/*
switch (c) {
case '1':
printf("Send 800 bytes to UART1\n");
for (int i = 0; i < 800; i++) {
Usart1_PutByte((i % 10) + '0');
}
break;
case '2':
printf("Send 800 bytes to UART2\n");
for (int i = 0; i < 800; i++) {
Usart2_PutByte((i % 20) + 'A');
}
break;
case '6':
printf("Send 800 bytes to UART6\n");
for (int i = 0; i < 800; i++) {
Usart6_PutByte((i % 20) + 'a');
}
break;
default: // echo back
Usart1_PutByte(c);
break;
}
*/
}
c = Usart2_GetByte(); c = Usart2_GetByte();
if (c != -1) { // new incoming data if (c != -1) {// new incoming data
Usart6_PutByte(c); // UART2rx --> UART6tx Usart6_PutByte(c);// UART2rx --> UART6tx
bytes_2to6++;
total_2to6++;
} }
c = Usart6_GetByte(); c = Usart6_GetByte();
if (c != -1) { // new incoming data if (c != -1) {// new incoming data
Usart2_PutByte(c); // UART6rx --> UART2tx Usart2_PutByte(c);// UART6rx --> UART2tx
bytes_6to2++;
total_6to2++;
} }
/* USER CODE END WHILE */ /* USER CODE END WHILE */
@ -222,13 +153,14 @@ void SystemClock_Config(void) {
/** Initializes the RCC Oscillators according to the specified parameters /** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure. * in the RCC_OscInitTypeDef structure.
*/ */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLM = 16;
RCC_OscInitStruct.PLL.PLLN = 256; RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV8; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
RCC_OscInitStruct.PLL.PLLQ = 7; RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler(); Error_Handler();
@ -240,10 +172,10 @@ void SystemClock_Config(void) {
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
Error_Handler(); Error_Handler();
} }
} }

@ -41,7 +41,6 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
volatile uint32_t SysTickCnt = 0;
/* USER CODE END PV */ /* USER CODE END PV */
@ -53,22 +52,6 @@ volatile uint32_t SysTickCnt = 0;
/* Private user code ---------------------------------------------------------*/ /* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
/***************************************************************************//**
* @brief Get absolute system time
*//****************************************************************************/
uint32_t SysTimeGetAbs (void) {
return SysTickCnt;
}
/***************************************************************************//**
* @brief Get relative time
*//****************************************************************************/
int32_t SysTimeGetRel (uint32_t tref) {
int32_t tdif = SysTickCnt - tref;
return tdif;
}
/* USER CODE END 0 */ /* USER CODE END 0 */
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
@ -204,7 +187,7 @@ void SysTick_Handler(void)
/* USER CODE END SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */
HAL_IncTick(); HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE BEGIN SysTick_IRQn 1 */
SysTickCnt++;
/* USER CODE END SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */
} }

@ -1,141 +0,0 @@
/***************************************************************************//**
* @file usart1_it.c
* @brief UART with interrupt and ring buffer (USART1)
*//****************************************************************************/
#include "stm32f4xx_hal.h"
//------------------------------C library---------------------------------------
#include <stdlib.h>
//----------------------------user includes-------------------------------------
#include "usart1_it.h"
#include "usart1_it_cfg.h"
//------------------------------------------------------------------------------
/* Private typedefs ----------------------------------------------------------*/
/* Private macros ------------------------------------------------------------*/
//====== UART buffer defines ===================================================
#define USART1_RXBUF_MASK (USART1_RXBUF_SIZE - 1)
#define USART1_TXBUF_MASK (USART1_TXBUF_SIZE - 1)
#if ( USART1_RXBUF_SIZE & USART1_RXBUF_MASK )
#error RX buffer size is not a power of 2!
#endif
#if ( USART1_TXBUF_SIZE & USART1_TXBUF_MASK )
#error TX buffer size is not a power of 2!
#endif
/* Private variables ---------------------------------------------------------*/
//====== Variables for transmitter =============================================
static uint8_t Usart1TxBuf[USART1_TXBUF_SIZE];
static uint16_t Usart1TxWrIdx = 0;
static volatile uint16_t Usart1TxRdIdx = 0;
//====== Variables for Receiver ================================================
static uint8_t Usart1RxBuf[USART1_RXBUF_SIZE];
static volatile uint16_t Usart1RxWrIdx = 0;
static volatile uint16_t Usart1RxRdIdx = 0;
/* Public variables ----------------------------------------------------------*/
/* Functions -----------------------------------------------------------------*/
/***************************************************************************//**
* @brief USART1 init
*//****************************************************************************/
void Usart1_Init(void) {
USART1->CR1 |= USART_CR1_RXNEIE; // Enable RX interrupt
}
/***************************************************************************//**
* @brief USART1 interrupt handler
*//****************************************************************************/
void USART1_IRQHandler(void) {
uint32_t statusreg = USART1->SR; // read interrupt flags
if ((statusreg & USART_SR_RXNE)) { // RX interrupt
uint8_t d = USART1->DR; // read received byte
uint_fast16_t wr = Usart1RxWrIdx;
wr = (wr + 1) & USART1_RXBUF_MASK; // new write index
Usart1RxBuf[wr] = d; // received data to buffer
Usart1RxWrIdx = wr; // Store new index
}
if ((statusreg & USART_SR_TXE)) { // TX interrupt
uint_fast16_t rd = Usart1TxRdIdx;
uint_fast16_t wr = Usart1TxWrIdx;
if (wr != rd) { // data in buffer
rd = (rd + 1) & USART1_TXBUF_MASK; // new read index
USART1->DR = Usart1TxBuf[rd]; // send data byte
Usart1TxRdIdx = rd; // Store new index
}
if (wr == rd) { // data buffer empty
USART1->CR1 &= ~USART_CR1_TXEIE; // INT disable
}
}
}
/***************************************************************************//**
* @brief Send byte to UART
* @param d: byte to send
*//****************************************************************************/
void Usart1_PutByte(uint8_t d) {
uint_fast16_t wr = Usart1TxWrIdx;
wr = (wr + 1) & USART1_TXBUF_MASK; // new write index
if (wr == Usart1TxRdIdx) { // No free space in buffer (overflow)
return; // drop remaining data (Attention! Buffer overflow not signaled! Use bigger buffer)
}
Usart1TxBuf[wr] = d; // Store data in buffer
Usart1TxWrIdx = wr; // Store new index
USART1->CR1 |= USART_CR1_TXEIE; // Interrupt enable (start send)
}
/***************************************************************************//**
* @brief Send more data to UART
* @param src: data to send
* @param n: count of data
*//****************************************************************************/
void Usart1_PutData (void* src, uint16_t n) {
uint8_t* p = src;
uint_fast16_t wr = Usart1TxWrIdx;
while (n) {
wr = (wr + 1) & USART1_TXBUF_MASK; // new write index
if (wr == Usart1TxRdIdx) { // No free space in buffer (overflow)
break; // drop remaining data (Attention! Buffer overflow not signaled! Use bigger buffer)
}
Usart1TxBuf[wr] = *p; // Store data in buffer
p++;
n--;
}
Usart1TxWrIdx = wr; // Store new index
USART1->CR1 |= USART_CR1_TXEIE; // Interrupt enable (start send)
}
/***************************************************************************//**
* @brief Read data from UART RX buffer
* @return received character, -1: no data in RX buffer
*//****************************************************************************/
int16_t Usart1_GetByte(void) {
uint_fast16_t rd = Usart1RxRdIdx;
if (rd != Usart1RxWrIdx) { // new data in buffer
rd = (rd + 1) & USART1_RXBUF_MASK; // new read index
Usart1RxRdIdx = rd; // store new index
return Usart1RxBuf[rd]; // return with data
}else {
return -1; // buffer empty
}
}

@ -1,13 +0,0 @@
// filepath: c:\projects\STM32CubeIDE\GNSS_Nucleo\Core\user\usart1_it.h
#ifndef __USART1_IT_H__
#define __USART1_IT_H__
#include <stdint.h>
extern void Usart1_Init(void);
extern void Usart1_PutByte(uint8_t d);
extern void Usart1_PutData(void* src, uint16_t n);
extern int16_t Usart1_GetByte(void);
#endif

@ -1,8 +0,0 @@
// filepath: c:\projects\STM32CubeIDE\GNSS_Nucleo\Core\user\usart1_it_cfg.h
#ifndef __USART1_IT_CFG_H__
#define __USART1_IT_CFG_H__
#define USART1_RXBUF_SIZE 1024
#define USART1_TXBUF_SIZE 1024
#endif // __USART1_IT_CFG_H__

@ -79,9 +79,9 @@ void USART2_IRQHandler(void) {
rd = (rd + 1) & USART2_TXBUF_MASK; // new read index rd = (rd + 1) & USART2_TXBUF_MASK; // new read index
USART2->DR = Usart2TxBuf[rd]; // send data byte USART2->DR = Usart2TxBuf[rd]; // send data byte
Usart2TxRdIdx = rd; // Store new index Usart2TxRdIdx = rd; // Store new index
} if (wr == rd) { // data buffer empty
if (wr == rd) { // data buffer empty USART2->CR1 &= ~USART_CR1_TXEIE; // INT disable
USART2->CR1 &= ~USART_CR1_TXEIE; // INT disable }
} }
} }
} }

@ -79,9 +79,9 @@ void USART6_IRQHandler(void) {
rd = (rd + 1) & USART6_TXBUF_MASK; // new read index rd = (rd + 1) & USART6_TXBUF_MASK; // new read index
USART6->DR = Usart6TxBuf[rd]; // send data byte USART6->DR = Usart6TxBuf[rd]; // send data byte
Usart6TxRdIdx = rd; // Store new index Usart6TxRdIdx = rd; // Store new index
} if (wr == rd) { // data buffer empty
if (wr == rd) { // data buffer empty USART6->CR1 &= ~USART_CR1_TXEIE; // INT disable
USART6->CR1 &= ~USART_CR1_TXEIE; // INT disable }
} }
} }
} }

@ -114,8 +114,10 @@ PC13-ANTI_TAMP.GPIO_PuPd=GPIO_NOPULL
PC13-ANTI_TAMP.Locked=true PC13-ANTI_TAMP.Locked=true
PC13-ANTI_TAMP.Signal=GPXTI13 PC13-ANTI_TAMP.Signal=GPXTI13
PC14-OSC32_IN.Locked=true PC14-OSC32_IN.Locked=true
PC14-OSC32_IN.Mode=LSE-External-Oscillator
PC14-OSC32_IN.Signal=RCC_OSC32_IN PC14-OSC32_IN.Signal=RCC_OSC32_IN
PC15-OSC32_OUT.Locked=true PC15-OSC32_OUT.Locked=true
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
PC6.GPIOParameters=GPIO_Speed PC6.GPIOParameters=GPIO_Speed
PC6.GPIO_Speed=GPIO_SPEED_FREQ_LOW PC6.GPIO_Speed=GPIO_SPEED_FREQ_LOW
@ -126,10 +128,10 @@ PC7.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PC7.Mode=Asynchronous PC7.Mode=Asynchronous
PC7.Signal=USART6_RX PC7.Signal=USART6_RX
PH0\ -\ OSC_IN.Locked=true PH0\ -\ OSC_IN.Locked=true
PH0\ -\ OSC_IN.Mode=HSE-External-Oscillator PH0\ -\ OSC_IN.Mode=HSE-External-Clock-Source
PH0\ -\ OSC_IN.Signal=RCC_OSC_IN PH0\ -\ OSC_IN.Signal=RCC_OSC_IN
PH1\ -\ OSC_OUT.Locked=true PH1\ -\ OSC_OUT.Locked=true
PH1\ -\ OSC_OUT.Mode=HSE-External-Oscillator PH1\ -\ OSC_OUT.Mode=HSE-External-Clock-Source
PH1\ -\ OSC_OUT.Signal=RCC_OSC_OUT PH1\ -\ OSC_OUT.Signal=RCC_OSC_OUT
PinOutPanel.RotationAngle=0 PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true ProjectManager.AskForMigrate=true
@ -164,36 +166,34 @@ ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_USART6_UART_Init-USART6-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-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_USART2_UART_Init-USART2-false-HAL-true,4-MX_USART6_UART_Init-USART6-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true
RCC.48MHZClocksFreq_Value=36571428.571428575 RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=32000000 RCC.AHBFreq_Value=84000000
RCC.APB1Freq_Value=32000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2
RCC.APB1TimFreq_Value=32000000 RCC.APB1Freq_Value=42000000
RCC.APB2Freq_Value=32000000 RCC.APB1TimFreq_Value=84000000
RCC.APB2TimFreq_Value=32000000 RCC.APB2Freq_Value=84000000
RCC.CortexFreq_Value=32000000 RCC.APB2TimFreq_Value=84000000
RCC.FCLKCortexFreq_Value=32000000 RCC.CortexFreq_Value=84000000
RCC.HCLKFreq_Value=32000000 RCC.FCLKCortexFreq_Value=84000000
RCC.HCLKFreq_Value=84000000
RCC.HSE_VALUE=8000000 RCC.HSE_VALUE=8000000
RCC.HSI_VALUE=16000000 RCC.HSI_VALUE=16000000
RCC.I2SClocksFreq_Value=96000000 RCC.I2SClocksFreq_Value=96000000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLP,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLN,PLLP,PLLQ,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
RCC.LSE_VALUE=32768
RCC.LSI_VALUE=32000 RCC.LSI_VALUE=32000
RCC.MCO2PinFreq_Value=32000000 RCC.MCO2PinFreq_Value=84000000
RCC.PLLCLKFreq_Value=32000000 RCC.PLLCLKFreq_Value=84000000
RCC.PLLM=8 RCC.PLLN=336
RCC.PLLN=256 RCC.PLLP=RCC_PLLP_DIV4
RCC.PLLP=RCC_PLLP_DIV8
RCC.PLLQ=7 RCC.PLLQ=7
RCC.PLLQCLKFreq_Value=36571428.571428575 RCC.PLLQCLKFreq_Value=48000000
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.RTCFreq_Value=32000 RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=4000000 RCC.RTCHSEDivFreq_Value=4000000
RCC.SYSCLKFreq_VALUE=32000000 RCC.SYSCLKFreq_VALUE=84000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.VCOI2SOutputFreq_Value=192000000 RCC.VCOI2SOutputFreq_Value=192000000
RCC.VCOInputFreq_Value=1000000 RCC.VCOInputFreq_Value=1000000
RCC.VCOOutputFreq_Value=256000000 RCC.VCOOutputFreq_Value=336000000
RCC.VcooutputI2S=96000000 RCC.VcooutputI2S=96000000
SH.GPXTI13.0=GPIO_EXTI13 SH.GPXTI13.0=GPIO_EXTI13
SH.GPXTI13.ConfNb=1 SH.GPXTI13.ConfNb=1

Loading…
Cancel
Save