Basic I2C functionality
This commit is contained in:
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"C_Cpp.intelliSenseEngine": "disabled",
|
"C_Cpp.intelliSenseEngine": "disabled",
|
||||||
|
|
||||||
"clangd.path": "/usr/bin/clangd",
|
"clangd.path": "/usr/bin/clangd",
|
||||||
"clangd.arguments": ["-log=verbose",
|
"clangd.arguments": [
|
||||||
|
"-log=verbose",
|
||||||
"-pretty",
|
"-pretty",
|
||||||
"--background-index",
|
"--background-index",
|
||||||
"--query-driver=/usr/bin/arm-none-eabi-g++",
|
"--query-driver=/usr/bin/arm-none-eabi-g++",
|
||||||
@@ -21,6 +21,5 @@
|
|||||||
"system_stm32f4xx.h": "c",
|
"system_stm32f4xx.h": "c",
|
||||||
"core_cm4.h": "c"
|
"core_cm4.h": "c"
|
||||||
},
|
},
|
||||||
cortex-debug
|
|
||||||
"cortex-debug.stlinkPath.linux": "/home/moritz/bin/st/stm32cubeclt/STLink-gdb-server/bin/ST-LINK_gdbserver"
|
"cortex-debug.stlinkPath.linux": "/home/moritz/bin/st/stm32cubeclt/STLink-gdb-server/bin/ST-LINK_gdbserver"
|
||||||
}
|
}
|
@@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.22)
|
|||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_C_STANDARD 11)
|
||||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_C_EXTENSIONS ON)
|
set(CMAKE_C_EXTENSIONS ON)
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
||||||
|
|
||||||
# Define the build type
|
# Define the build type
|
||||||
@@ -23,7 +23,7 @@ endif()
|
|||||||
set(CMAKE_PROJECT_NAME weight_cell)
|
set(CMAKE_PROJECT_NAME weight_cell)
|
||||||
|
|
||||||
# Color output
|
# Color output
|
||||||
set(CMAKE_CXX_FLAGSS "-fdiagnostics-color=always")
|
set(CMAKE_CXX_FLAGSS "-fdiagnostics-color=always -funwind-tables")
|
||||||
|
|
||||||
# Include toolchain file
|
# Include toolchain file
|
||||||
include("cmake/gcc-arm-none-eabi.cmake")
|
include("cmake/gcc-arm-none-eabi.cmake")
|
||||||
@@ -54,6 +54,7 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE
|
|||||||
Core/Src/main.cpp
|
Core/Src/main.cpp
|
||||||
Core/Src/nau7802.cpp
|
Core/Src/nau7802.cpp
|
||||||
Core/Src/usart.cpp
|
Core/Src/usart.cpp
|
||||||
|
Core/Src/i2c.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add include paths
|
# Add include paths
|
||||||
|
32
Core/Inc/i2c.hpp
Normal file
32
Core/Inc/i2c.hpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "stm32f401xe.h"
|
||||||
|
#include "stm32f4xx_hal.h"
|
||||||
|
#include "stm32f4xx_hal_i2c.h"
|
||||||
|
#include "stm32f4xx_hal_uart.h"
|
||||||
|
|
||||||
|
namespace driver::i2c {
|
||||||
|
|
||||||
|
constexpr const uint32_t I2C_TIMEOUT_MS{200};
|
||||||
|
|
||||||
|
class I2c {
|
||||||
|
public:
|
||||||
|
explicit I2c(I2C_TypeDef* i2c, const uint32_t clockSpeed, const uint32_t dutyCycle,
|
||||||
|
const uint32_t ownAddress1, const uint32_t addressingMode,
|
||||||
|
const uint32_t dualAddressMode, const uint32_t ownAddress2,
|
||||||
|
const uint32_t generalCallMode, const uint32_t noStretchMode);
|
||||||
|
~I2c() = default;
|
||||||
|
|
||||||
|
bool init();
|
||||||
|
void deinit();
|
||||||
|
HAL_StatusTypeDef write(const uint16_t slaveAddr, const uint16_t memAddr,
|
||||||
|
std::vector<uint8_t>& data);
|
||||||
|
std::pair<HAL_StatusTypeDef, uint8_t> read(const uint16_t slaveAddr, const uint16_t memAddr);
|
||||||
|
uint32_t getLastError();
|
||||||
|
|
||||||
|
private:
|
||||||
|
I2C_HandleTypeDef mHandle;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace driver::i2c
|
@@ -25,7 +25,7 @@
|
|||||||
#define __STM32F4xx_HAL_CONF_H
|
#define __STM32F4xx_HAL_CONF_H
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
/* Exported types ------------------------------------------------------------*/
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
#define HAL_MODULE_ENABLED
|
#define HAL_MODULE_ENABLED
|
||||||
|
|
||||||
/* #define HAL_CRYP_MODULE_ENABLED */
|
/* #define HAL_CRYP_MODULE_ENABLED */
|
||||||
/* #define HAL_ADC_MODULE_ENABLED */
|
/* #define HAL_ADC_MODULE_ENABLED */
|
||||||
/* #define HAL_CAN_MODULE_ENABLED */
|
/* #define HAL_CAN_MODULE_ENABLED */
|
||||||
/* #define HAL_CRC_MODULE_ENABLED */
|
/* #define HAL_CRC_MODULE_ENABLED */
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
/* #define HAL_SRAM_MODULE_ENABLED */
|
/* #define HAL_SRAM_MODULE_ENABLED */
|
||||||
/* #define HAL_SDRAM_MODULE_ENABLED */
|
/* #define HAL_SDRAM_MODULE_ENABLED */
|
||||||
/* #define HAL_HASH_MODULE_ENABLED */
|
/* #define HAL_HASH_MODULE_ENABLED */
|
||||||
/* #define HAL_I2C_MODULE_ENABLED */
|
#define HAL_I2C_MODULE_ENABLED
|
||||||
/* #define HAL_I2S_MODULE_ENABLED */
|
/* #define HAL_I2S_MODULE_ENABLED */
|
||||||
/* #define HAL_IWDG_MODULE_ENABLED */
|
/* #define HAL_IWDG_MODULE_ENABLED */
|
||||||
/* #define HAL_LTDC_MODULE_ENABLED */
|
/* #define HAL_LTDC_MODULE_ENABLED */
|
||||||
@@ -95,12 +95,12 @@
|
|||||||
* This value is used by the RCC HAL module to compute the system frequency
|
* This value is used by the RCC HAL module to compute the system frequency
|
||||||
* (when HSE is used as system clock source, directly or through the PLL).
|
* (when HSE is used as system clock source, directly or through the PLL).
|
||||||
*/
|
*/
|
||||||
#if !defined (HSE_VALUE)
|
#if !defined(HSE_VALUE)
|
||||||
#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */
|
#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */
|
||||||
#endif /* HSE_VALUE */
|
#endif /* HSE_VALUE */
|
||||||
|
|
||||||
#if !defined (HSE_STARTUP_TIMEOUT)
|
#if !defined(HSE_STARTUP_TIMEOUT)
|
||||||
#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */
|
#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */
|
||||||
#endif /* HSE_STARTUP_TIMEOUT */
|
#endif /* HSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -108,27 +108,27 @@
|
|||||||
* This value is used by the RCC HAL module to compute the system frequency
|
* This value is used by the RCC HAL module to compute the system frequency
|
||||||
* (when HSI is used as system clock source, directly or through the PLL).
|
* (when HSI is used as system clock source, directly or through the PLL).
|
||||||
*/
|
*/
|
||||||
#if !defined (HSI_VALUE)
|
#if !defined(HSI_VALUE)
|
||||||
#define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/
|
#define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/
|
||||||
#endif /* HSI_VALUE */
|
#endif /* HSI_VALUE */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Internal Low Speed oscillator (LSI) value.
|
* @brief Internal Low Speed oscillator (LSI) value.
|
||||||
*/
|
*/
|
||||||
#if !defined (LSI_VALUE)
|
#if !defined(LSI_VALUE)
|
||||||
#define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/
|
#define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/
|
||||||
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
|
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
|
||||||
The real value may vary depending on the variations
|
The real value may vary depending on the variations
|
||||||
in voltage and temperature.*/
|
in voltage and temperature.*/
|
||||||
/**
|
/**
|
||||||
* @brief External Low Speed oscillator (LSE) value.
|
* @brief External Low Speed oscillator (LSE) value.
|
||||||
*/
|
*/
|
||||||
#if !defined (LSE_VALUE)
|
#if !defined(LSE_VALUE)
|
||||||
#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */
|
#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */
|
||||||
#endif /* LSE_VALUE */
|
#endif /* LSE_VALUE */
|
||||||
|
|
||||||
#if !defined (LSE_STARTUP_TIMEOUT)
|
#if !defined(LSE_STARTUP_TIMEOUT)
|
||||||
#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */
|
#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */
|
||||||
#endif /* LSE_STARTUP_TIMEOUT */
|
#endif /* LSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -136,8 +136,8 @@
|
|||||||
* This value is used by the I2S HAL module to compute the I2S clock source
|
* This value is used by the I2S HAL module to compute the I2S clock source
|
||||||
* frequency, this source is inserted directly through I2S_CKIN pad.
|
* frequency, this source is inserted directly through I2S_CKIN pad.
|
||||||
*/
|
*/
|
||||||
#if !defined (EXTERNAL_CLOCK_VALUE)
|
#if !defined(EXTERNAL_CLOCK_VALUE)
|
||||||
#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External audio frequency in Hz*/
|
#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External audio frequency in Hz*/
|
||||||
#endif /* EXTERNAL_CLOCK_VALUE */
|
#endif /* EXTERNAL_CLOCK_VALUE */
|
||||||
|
|
||||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
|
/* Tip: To avoid modifying this file each time you need to use different HSE,
|
||||||
@@ -272,203 +272,203 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAL_RCC_MODULE_ENABLED
|
#ifdef HAL_RCC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_rcc.h"
|
#include "stm32f4xx_hal_rcc.h"
|
||||||
#endif /* HAL_RCC_MODULE_ENABLED */
|
#endif /* HAL_RCC_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_GPIO_MODULE_ENABLED
|
#ifdef HAL_GPIO_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_gpio.h"
|
#include "stm32f4xx_hal_gpio.h"
|
||||||
#endif /* HAL_GPIO_MODULE_ENABLED */
|
#endif /* HAL_GPIO_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_EXTI_MODULE_ENABLED
|
#ifdef HAL_EXTI_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_exti.h"
|
#include "stm32f4xx_hal_exti.h"
|
||||||
#endif /* HAL_EXTI_MODULE_ENABLED */
|
#endif /* HAL_EXTI_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_DMA_MODULE_ENABLED
|
#ifdef HAL_DMA_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_dma.h"
|
#include "stm32f4xx_hal_dma.h"
|
||||||
#endif /* HAL_DMA_MODULE_ENABLED */
|
#endif /* HAL_DMA_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_CORTEX_MODULE_ENABLED
|
#ifdef HAL_CORTEX_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_cortex.h"
|
#include "stm32f4xx_hal_cortex.h"
|
||||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_ADC_MODULE_ENABLED
|
#ifdef HAL_ADC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_adc.h"
|
#include "stm32f4xx_hal_adc.h"
|
||||||
#endif /* HAL_ADC_MODULE_ENABLED */
|
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_CAN_MODULE_ENABLED
|
#ifdef HAL_CAN_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_can.h"
|
#include "stm32f4xx_hal_can.h"
|
||||||
#endif /* HAL_CAN_MODULE_ENABLED */
|
#endif /* HAL_CAN_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_CAN_LEGACY_MODULE_ENABLED
|
#ifdef HAL_CAN_LEGACY_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_can_legacy.h"
|
#include "stm32f4xx_hal_can_legacy.h"
|
||||||
#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */
|
#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_CRC_MODULE_ENABLED
|
#ifdef HAL_CRC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_crc.h"
|
#include "stm32f4xx_hal_crc.h"
|
||||||
#endif /* HAL_CRC_MODULE_ENABLED */
|
#endif /* HAL_CRC_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_CRYP_MODULE_ENABLED
|
#ifdef HAL_CRYP_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_cryp.h"
|
#include "stm32f4xx_hal_cryp.h"
|
||||||
#endif /* HAL_CRYP_MODULE_ENABLED */
|
#endif /* HAL_CRYP_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_DMA2D_MODULE_ENABLED
|
#ifdef HAL_DMA2D_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_dma2d.h"
|
#include "stm32f4xx_hal_dma2d.h"
|
||||||
#endif /* HAL_DMA2D_MODULE_ENABLED */
|
#endif /* HAL_DMA2D_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_DAC_MODULE_ENABLED
|
#ifdef HAL_DAC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_dac.h"
|
#include "stm32f4xx_hal_dac.h"
|
||||||
#endif /* HAL_DAC_MODULE_ENABLED */
|
#endif /* HAL_DAC_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_DCMI_MODULE_ENABLED
|
#ifdef HAL_DCMI_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_dcmi.h"
|
#include "stm32f4xx_hal_dcmi.h"
|
||||||
#endif /* HAL_DCMI_MODULE_ENABLED */
|
#endif /* HAL_DCMI_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_ETH_MODULE_ENABLED
|
#ifdef HAL_ETH_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_eth.h"
|
#include "stm32f4xx_hal_eth.h"
|
||||||
#endif /* HAL_ETH_MODULE_ENABLED */
|
#endif /* HAL_ETH_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_ETH_LEGACY_MODULE_ENABLED
|
#ifdef HAL_ETH_LEGACY_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_eth_legacy.h"
|
#include "stm32f4xx_hal_eth_legacy.h"
|
||||||
#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */
|
#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_FLASH_MODULE_ENABLED
|
#ifdef HAL_FLASH_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_flash.h"
|
#include "stm32f4xx_hal_flash.h"
|
||||||
#endif /* HAL_FLASH_MODULE_ENABLED */
|
#endif /* HAL_FLASH_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SRAM_MODULE_ENABLED
|
#ifdef HAL_SRAM_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_sram.h"
|
#include "stm32f4xx_hal_sram.h"
|
||||||
#endif /* HAL_SRAM_MODULE_ENABLED */
|
#endif /* HAL_SRAM_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_NOR_MODULE_ENABLED
|
#ifdef HAL_NOR_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_nor.h"
|
#include "stm32f4xx_hal_nor.h"
|
||||||
#endif /* HAL_NOR_MODULE_ENABLED */
|
#endif /* HAL_NOR_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_NAND_MODULE_ENABLED
|
#ifdef HAL_NAND_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_nand.h"
|
#include "stm32f4xx_hal_nand.h"
|
||||||
#endif /* HAL_NAND_MODULE_ENABLED */
|
#endif /* HAL_NAND_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_PCCARD_MODULE_ENABLED
|
#ifdef HAL_PCCARD_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_pccard.h"
|
#include "stm32f4xx_hal_pccard.h"
|
||||||
#endif /* HAL_PCCARD_MODULE_ENABLED */
|
#endif /* HAL_PCCARD_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SDRAM_MODULE_ENABLED
|
#ifdef HAL_SDRAM_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_sdram.h"
|
#include "stm32f4xx_hal_sdram.h"
|
||||||
#endif /* HAL_SDRAM_MODULE_ENABLED */
|
#endif /* HAL_SDRAM_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_HASH_MODULE_ENABLED
|
#ifdef HAL_HASH_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_hash.h"
|
#include "stm32f4xx_hal_hash.h"
|
||||||
#endif /* HAL_HASH_MODULE_ENABLED */
|
#endif /* HAL_HASH_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_I2C_MODULE_ENABLED
|
#ifdef HAL_I2C_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_i2c.h"
|
#include "stm32f4xx_hal_i2c.h"
|
||||||
#endif /* HAL_I2C_MODULE_ENABLED */
|
#endif /* HAL_I2C_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SMBUS_MODULE_ENABLED
|
#ifdef HAL_SMBUS_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_smbus.h"
|
#include "stm32f4xx_hal_smbus.h"
|
||||||
#endif /* HAL_SMBUS_MODULE_ENABLED */
|
#endif /* HAL_SMBUS_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_I2S_MODULE_ENABLED
|
#ifdef HAL_I2S_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_i2s.h"
|
#include "stm32f4xx_hal_i2s.h"
|
||||||
#endif /* HAL_I2S_MODULE_ENABLED */
|
#endif /* HAL_I2S_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_IWDG_MODULE_ENABLED
|
#ifdef HAL_IWDG_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_iwdg.h"
|
#include "stm32f4xx_hal_iwdg.h"
|
||||||
#endif /* HAL_IWDG_MODULE_ENABLED */
|
#endif /* HAL_IWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_LTDC_MODULE_ENABLED
|
#ifdef HAL_LTDC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_ltdc.h"
|
#include "stm32f4xx_hal_ltdc.h"
|
||||||
#endif /* HAL_LTDC_MODULE_ENABLED */
|
#endif /* HAL_LTDC_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_PWR_MODULE_ENABLED
|
#ifdef HAL_PWR_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_pwr.h"
|
#include "stm32f4xx_hal_pwr.h"
|
||||||
#endif /* HAL_PWR_MODULE_ENABLED */
|
#endif /* HAL_PWR_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_RNG_MODULE_ENABLED
|
#ifdef HAL_RNG_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_rng.h"
|
#include "stm32f4xx_hal_rng.h"
|
||||||
#endif /* HAL_RNG_MODULE_ENABLED */
|
#endif /* HAL_RNG_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_RTC_MODULE_ENABLED
|
#ifdef HAL_RTC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_rtc.h"
|
#include "stm32f4xx_hal_rtc.h"
|
||||||
#endif /* HAL_RTC_MODULE_ENABLED */
|
#endif /* HAL_RTC_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SAI_MODULE_ENABLED
|
#ifdef HAL_SAI_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_sai.h"
|
#include "stm32f4xx_hal_sai.h"
|
||||||
#endif /* HAL_SAI_MODULE_ENABLED */
|
#endif /* HAL_SAI_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SD_MODULE_ENABLED
|
#ifdef HAL_SD_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_sd.h"
|
#include "stm32f4xx_hal_sd.h"
|
||||||
#endif /* HAL_SD_MODULE_ENABLED */
|
#endif /* HAL_SD_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SPI_MODULE_ENABLED
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_spi.h"
|
#include "stm32f4xx_hal_spi.h"
|
||||||
#endif /* HAL_SPI_MODULE_ENABLED */
|
#endif /* HAL_SPI_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_TIM_MODULE_ENABLED
|
#ifdef HAL_TIM_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_tim.h"
|
#include "stm32f4xx_hal_tim.h"
|
||||||
#endif /* HAL_TIM_MODULE_ENABLED */
|
#endif /* HAL_TIM_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_UART_MODULE_ENABLED
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_uart.h"
|
#include "stm32f4xx_hal_uart.h"
|
||||||
#endif /* HAL_UART_MODULE_ENABLED */
|
#endif /* HAL_UART_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_USART_MODULE_ENABLED
|
#ifdef HAL_USART_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_usart.h"
|
#include "stm32f4xx_hal_usart.h"
|
||||||
#endif /* HAL_USART_MODULE_ENABLED */
|
#endif /* HAL_USART_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_IRDA_MODULE_ENABLED
|
#ifdef HAL_IRDA_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_irda.h"
|
#include "stm32f4xx_hal_irda.h"
|
||||||
#endif /* HAL_IRDA_MODULE_ENABLED */
|
#endif /* HAL_IRDA_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED
|
#ifdef HAL_SMARTCARD_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_smartcard.h"
|
#include "stm32f4xx_hal_smartcard.h"
|
||||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
|
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_WWDG_MODULE_ENABLED
|
#ifdef HAL_WWDG_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_wwdg.h"
|
#include "stm32f4xx_hal_wwdg.h"
|
||||||
#endif /* HAL_WWDG_MODULE_ENABLED */
|
#endif /* HAL_WWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_PCD_MODULE_ENABLED
|
#ifdef HAL_PCD_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_pcd.h"
|
#include "stm32f4xx_hal_pcd.h"
|
||||||
#endif /* HAL_PCD_MODULE_ENABLED */
|
#endif /* HAL_PCD_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_HCD_MODULE_ENABLED
|
#ifdef HAL_HCD_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_hcd.h"
|
#include "stm32f4xx_hal_hcd.h"
|
||||||
#endif /* HAL_HCD_MODULE_ENABLED */
|
#endif /* HAL_HCD_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_DSI_MODULE_ENABLED
|
#ifdef HAL_DSI_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_dsi.h"
|
#include "stm32f4xx_hal_dsi.h"
|
||||||
#endif /* HAL_DSI_MODULE_ENABLED */
|
#endif /* HAL_DSI_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_QSPI_MODULE_ENABLED
|
#ifdef HAL_QSPI_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_qspi.h"
|
#include "stm32f4xx_hal_qspi.h"
|
||||||
#endif /* HAL_QSPI_MODULE_ENABLED */
|
#endif /* HAL_QSPI_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_CEC_MODULE_ENABLED
|
#ifdef HAL_CEC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_cec.h"
|
#include "stm32f4xx_hal_cec.h"
|
||||||
#endif /* HAL_CEC_MODULE_ENABLED */
|
#endif /* HAL_CEC_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_FMPI2C_MODULE_ENABLED
|
#ifdef HAL_FMPI2C_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_fmpi2c.h"
|
#include "stm32f4xx_hal_fmpi2c.h"
|
||||||
#endif /* HAL_FMPI2C_MODULE_ENABLED */
|
#endif /* HAL_FMPI2C_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_FMPSMBUS_MODULE_ENABLED
|
#ifdef HAL_FMPSMBUS_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_fmpsmbus.h"
|
#include "stm32f4xx_hal_fmpsmbus.h"
|
||||||
#endif /* HAL_FMPSMBUS_MODULE_ENABLED */
|
#endif /* HAL_FMPSMBUS_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_SPDIFRX_MODULE_ENABLED
|
#ifdef HAL_SPDIFRX_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_spdifrx.h"
|
#include "stm32f4xx_hal_spdifrx.h"
|
||||||
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
|
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_DFSDM_MODULE_ENABLED
|
#ifdef HAL_DFSDM_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_dfsdm.h"
|
#include "stm32f4xx_hal_dfsdm.h"
|
||||||
#endif /* HAL_DFSDM_MODULE_ENABLED */
|
#endif /* HAL_DFSDM_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_LPTIM_MODULE_ENABLED
|
#ifdef HAL_LPTIM_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_lptim.h"
|
#include "stm32f4xx_hal_lptim.h"
|
||||||
#endif /* HAL_LPTIM_MODULE_ENABLED */
|
#endif /* HAL_LPTIM_MODULE_ENABLED */
|
||||||
|
|
||||||
#ifdef HAL_MMC_MODULE_ENABLED
|
#ifdef HAL_MMC_MODULE_ENABLED
|
||||||
#include "stm32f4xx_hal_mmc.h"
|
#include "stm32f4xx_hal_mmc.h"
|
||||||
#endif /* HAL_MMC_MODULE_ENABLED */
|
#endif /* HAL_MMC_MODULE_ENABLED */
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
@@ -481,11 +481,11 @@
|
|||||||
* If expr is true, it returns no value.
|
* If expr is true, it returns no value.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
|
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t*)__FILE__, __LINE__))
|
||||||
/* Exported functions ------------------------------------------------------- */
|
/* Exported functions ------------------------------------------------------- */
|
||||||
void assert_failed(uint8_t* file, uint32_t line);
|
void assert_failed(uint8_t* file, uint32_t line);
|
||||||
#else
|
#else
|
||||||
#define assert_param(expr) ((void)0U)
|
#define assert_param(expr) ((void)0U)
|
||||||
#endif /* USE_FULL_ASSERT */
|
#endif /* USE_FULL_ASSERT */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ranges>
|
|
||||||
#include <sstream>
|
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
|
||||||
#include "stm32f401xe.h"
|
#include "stm32f401xe.h"
|
||||||
@@ -10,7 +8,6 @@
|
|||||||
|
|
||||||
namespace driver::usart {
|
namespace driver::usart {
|
||||||
|
|
||||||
constexpr const uint8_t TX_BUFSIZE{20};
|
|
||||||
constexpr const uint8_t TX_TIMEOUT_MS{200};
|
constexpr const uint8_t TX_TIMEOUT_MS{200};
|
||||||
|
|
||||||
class Usart {
|
class Usart {
|
||||||
|
77
Core/Src/i2c.cpp
Normal file
77
Core/Src/i2c.cpp
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
#include "i2c.hpp"
|
||||||
|
|
||||||
|
#include "pindef.hpp"
|
||||||
|
#include "stm32f4xx_hal_i2c.h"
|
||||||
|
|
||||||
|
namespace driver::i2c {
|
||||||
|
I2c::I2c(I2C_TypeDef* i2c, const uint32_t clockSpeed, const uint32_t dutyCycle,
|
||||||
|
const uint32_t ownAddress1, const uint32_t addressingMode, const uint32_t dualAddressMode,
|
||||||
|
const uint32_t ownAddress2, const uint32_t generalCallMode, const uint32_t noStretchMode)
|
||||||
|
: mHandle{.Instance = i2c,
|
||||||
|
.Init{.ClockSpeed = clockSpeed,
|
||||||
|
.DutyCycle = dutyCycle,
|
||||||
|
.OwnAddress1 = ownAddress1,
|
||||||
|
.AddressingMode = addressingMode,
|
||||||
|
.DualAddressMode = dualAddressMode,
|
||||||
|
.OwnAddress2 = ownAddress2,
|
||||||
|
.GeneralCallMode = generalCallMode,
|
||||||
|
.NoStretchMode = noStretchMode},
|
||||||
|
.pBuffPtr = nullptr,
|
||||||
|
.XferSize = 0,
|
||||||
|
.XferCount = 0,
|
||||||
|
.XferOptions = 0,
|
||||||
|
.PreviousState = 0,
|
||||||
|
.hdmatx = nullptr,
|
||||||
|
.hdmarx = nullptr,
|
||||||
|
.Lock = HAL_UNLOCKED,
|
||||||
|
.State = HAL_I2C_STATE_RESET,
|
||||||
|
.Mode = HAL_I2C_MODE_NONE,
|
||||||
|
.ErrorCode = HAL_I2C_ERROR_NONE,
|
||||||
|
.Devaddress = 0,
|
||||||
|
.Memaddress = 0,
|
||||||
|
.MemaddSize = 0,
|
||||||
|
.EventCount = 0} {}
|
||||||
|
|
||||||
|
bool I2c::init() {
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
if (mHandle.Instance == I2C1) {
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
/**I2C1 GPIO Configuration
|
||||||
|
PB6 ------> I2C1_SCL
|
||||||
|
PB7 ------> I2C1_SDA
|
||||||
|
*/
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
__HAL_RCC_I2C1_CLK_ENABLE();
|
||||||
|
}
|
||||||
|
return HAL_I2C_Init(&mHandle) == HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void I2c::deinit() {}
|
||||||
|
|
||||||
|
HAL_StatusTypeDef I2c::write(const uint16_t slaveAddr, const uint16_t memAddr,
|
||||||
|
std::vector<uint8_t>& data) {
|
||||||
|
// Slave address needs to be shifted to the left, so that the r/w bit can be set by the HAL method
|
||||||
|
// Addressing mode for slaves is fixed to 8bit for now...
|
||||||
|
return HAL_I2C_Mem_Write(&mHandle, slaveAddr << 1, memAddr, I2C_MEMADD_SIZE_8BIT, data.data(),
|
||||||
|
data.size(), I2C_TIMEOUT_MS);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<HAL_StatusTypeDef, uint8_t> I2c::read(const uint16_t slaveAddr, const uint16_t memAddr) {
|
||||||
|
uint8_t data;
|
||||||
|
// Slave address needs to be shifted to the left, so that the r/w bit can be set by the HAL method
|
||||||
|
auto state = HAL_I2C_Mem_Read(&mHandle, slaveAddr << 1, memAddr, I2C_MEMADD_SIZE_8BIT, &data, 1,
|
||||||
|
I2C_TIMEOUT_MS);
|
||||||
|
return {state, data};
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t I2c::getLastError() {
|
||||||
|
return mHandle.ErrorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace driver::i2c
|
@@ -1,12 +1,22 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdint>
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
|
#include "i2c.hpp"
|
||||||
|
#include "stm32_hal_legacy.h"
|
||||||
#include "stm32f4xx_hal.h"
|
#include "stm32f4xx_hal.h"
|
||||||
|
#include "stm32f4xx_hal_def.h"
|
||||||
|
#include "stm32f4xx_hal_i2c.h"
|
||||||
#include "usart.hpp"
|
#include "usart.hpp"
|
||||||
|
|
||||||
|
// needs to be global to be accessible in error handler
|
||||||
|
std::unique_ptr<driver::usart::Usart> usart2{nullptr};
|
||||||
|
|
||||||
void SystemClock_Config(void);
|
void SystemClock_Config(void);
|
||||||
|
void checkHalStatus(HAL_StatusTypeDef);
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
|
||||||
@@ -19,20 +29,85 @@ int main(void) {
|
|||||||
/* Initialize all configured peripherals */
|
/* Initialize all configured peripherals */
|
||||||
MX_GPIO_Init();
|
MX_GPIO_Init();
|
||||||
|
|
||||||
driver::usart::Usart usart2(USART2, 115200, UART_WORDLENGTH_8B, UART_STOPBITS_1,
|
usart2 = std::make_unique<driver::usart::Usart>(
|
||||||
UART_PARITY_NONE, UART_MODE_TX_RX, UART_HWCONTROL_NONE,
|
driver::usart::Usart(USART2, 115200, UART_WORDLENGTH_8B, UART_STOPBITS_1, UART_PARITY_NONE,
|
||||||
UART_OVERSAMPLING_16);
|
UART_MODE_TX_RX, UART_HWCONTROL_NONE, UART_OVERSAMPLING_16));
|
||||||
|
|
||||||
usart2.init();
|
usart2->init();
|
||||||
usart2.println("");
|
usart2->println("");
|
||||||
usart2.println("\r\nWeight cell init.");
|
usart2->println("\r\nWeight cell init.");
|
||||||
|
|
||||||
int i{0};
|
auto i2c1 = std::make_unique<driver::i2c::I2c>(
|
||||||
|
I2C1, 100000, I2C_DUTYCYCLE_2, 0x00, I2C_ADDRESSINGMODE_7BIT, I2C_DUALADDRESS_DISABLED,
|
||||||
|
0x00, I2C_GENERALCALL_DISABLED, I2C_NOSTRETCH_DISABLED);
|
||||||
|
|
||||||
|
if (!i2c1->init()) {
|
||||||
|
usart2->println("Error intializing I2C1!");
|
||||||
|
usart2->println("Last Error: " + std::to_string(i2c1->getLastError()));
|
||||||
|
Error_Handler();
|
||||||
|
} else {
|
||||||
|
usart2->println("I2C1 intialized successful");
|
||||||
|
}
|
||||||
|
// init NAU7802
|
||||||
|
{
|
||||||
|
std::vector<uint8_t> data = {0x01};
|
||||||
|
// reset NAU7802
|
||||||
|
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
||||||
|
usart2->println("Reset nau");
|
||||||
|
HAL_Delay(100);
|
||||||
|
|
||||||
|
// power up digital logic
|
||||||
|
data[0] = 0x02;
|
||||||
|
i2c1->write(0x2A, 0x00, data);
|
||||||
|
HAL_Delay(100);
|
||||||
|
usart2->println("PUP digi");
|
||||||
|
|
||||||
|
// power up analog logic
|
||||||
|
data[0] = 0x06;
|
||||||
|
i2c1->write(0x2A, 0x00, data);
|
||||||
|
HAL_Delay(100);
|
||||||
|
|
||||||
|
usart2->println("PUP analog");
|
||||||
|
|
||||||
|
// use internal LDO as reference
|
||||||
|
data[0] = 0x86;
|
||||||
|
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
||||||
|
HAL_Delay(100);
|
||||||
|
|
||||||
|
// print status back to usart
|
||||||
|
auto ret = i2c1->read(0x2A, 0x00);
|
||||||
|
checkHalStatus(ret.first);
|
||||||
|
usart2->println("NAU7802 reports state " + std::to_string(ret.second) + " at 0x00");
|
||||||
|
|
||||||
|
// REG_CHPS CLK_CHP off
|
||||||
|
data[0] = 0x30;
|
||||||
|
checkHalStatus(i2c1->write(0x2A, 0x15, data));
|
||||||
|
HAL_Delay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t measurement = 0;
|
||||||
|
auto val = i2c1->read(0x2A, 0x12);
|
||||||
|
measurement |= (val.second << 16);
|
||||||
|
|
||||||
|
val = i2c1->read(0x2A, 0x13);
|
||||||
|
measurement |= (val.second << 8);
|
||||||
|
|
||||||
|
val = i2c1->read(0x2A, 0x14);
|
||||||
|
measurement |= val.second << 16;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
std::string buf{"Iteration #"};
|
measurement = 0;
|
||||||
|
val = i2c1->read(0x2A, 0x12);
|
||||||
|
measurement |= (val.second << 16);
|
||||||
|
|
||||||
|
val = i2c1->read(0x2A, 0x13);
|
||||||
|
measurement |= (val.second << 8);
|
||||||
|
|
||||||
|
val = i2c1->read(0x2A, 0x14);
|
||||||
|
measurement |= val.second << 16;
|
||||||
|
|
||||||
|
usart2->println("Measurement " + std::to_string(measurement) + " counts");
|
||||||
|
|
||||||
usart2.println(buf + std::to_string(i++));
|
|
||||||
HAL_Delay(1000);
|
HAL_Delay(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,6 +150,17 @@ void SystemClock_Config(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void checkHalStatus(HAL_StatusTypeDef status) {
|
||||||
|
if (status == HAL_OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (usart2 == nullptr) {
|
||||||
|
Error_Handler();
|
||||||
|
return; // never reached
|
||||||
|
}
|
||||||
|
usart2->println("HAL Status not okay! Calling Error Handler");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function is executed in case of error occurrence.
|
* @brief This function is executed in case of error occurrence.
|
||||||
* @retval None
|
* @retval None
|
||||||
@@ -82,6 +168,10 @@ void SystemClock_Config(void) {
|
|||||||
void Error_Handler(void) {
|
void Error_Handler(void) {
|
||||||
/* USER CODE BEGIN Error_Handler_Debug */
|
/* USER CODE BEGIN Error_Handler_Debug */
|
||||||
/* User can add his own implementation to report the HAL error return state */
|
/* User can add his own implementation to report the HAL error return state */
|
||||||
|
if (usart2 != nullptr) {
|
||||||
|
usart2->println("=== ERROR HANDLER ===");
|
||||||
|
usart2->println("entering infinite loop...");
|
||||||
|
}
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
while (1) {}
|
while (1) {}
|
||||||
/* USER CODE END Error_Handler_Debug */
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
@@ -12,13 +12,29 @@ namespace driver::usart {
|
|||||||
Usart::Usart(USART_TypeDef* usart, uint32_t baudRate, uint32_t wordLength, uint32_t stopBits,
|
Usart::Usart(USART_TypeDef* usart, uint32_t baudRate, uint32_t wordLength, uint32_t stopBits,
|
||||||
uint32_t parity, uint32_t mode, uint32_t hwFlowCtl, uint32_t overSampling)
|
uint32_t parity, uint32_t mode, uint32_t hwFlowCtl, uint32_t overSampling)
|
||||||
: mHandle{.Instance = usart,
|
: mHandle{.Instance = usart,
|
||||||
.Init{.BaudRate = baudRate,
|
.Init{
|
||||||
|
.BaudRate = baudRate,
|
||||||
.WordLength = wordLength,
|
.WordLength = wordLength,
|
||||||
.StopBits = stopBits,
|
.StopBits = stopBits,
|
||||||
.Parity = parity,
|
.Parity = parity,
|
||||||
.Mode = mode,
|
.Mode = mode,
|
||||||
.HwFlowCtl = hwFlowCtl,
|
.HwFlowCtl = hwFlowCtl,
|
||||||
.OverSampling = overSampling}} {}
|
.OverSampling = overSampling,
|
||||||
|
},
|
||||||
|
.pTxBuffPtr = nullptr,
|
||||||
|
.TxXferSize = 0,
|
||||||
|
.TxXferCount = 0,
|
||||||
|
.pRxBuffPtr = nullptr,
|
||||||
|
.RxXferSize = 0,
|
||||||
|
.RxXferCount = 0,
|
||||||
|
.ReceptionType = HAL_UART_RECEPTION_STANDARD,
|
||||||
|
.RxEventType = HAL_UART_RXEVENT_TC,
|
||||||
|
.hdmatx = nullptr,
|
||||||
|
.hdmarx = nullptr,
|
||||||
|
.Lock = HAL_UNLOCKED,
|
||||||
|
.gState = HAL_UART_STATE_RESET,
|
||||||
|
.RxState = HAL_UART_STATE_RESET,
|
||||||
|
.ErrorCode = 0} {}
|
||||||
|
|
||||||
bool Usart::init() {
|
bool Usart::init() {
|
||||||
GPIO_InitTypeDef GPIO_InitStruct;
|
GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
@@ -38,7 +54,7 @@ bool Usart::init() {
|
|||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
}
|
}
|
||||||
|
|
||||||
return HAL_UART_Init(&mHandle) != HAL_OK;
|
return HAL_UART_Init(&mHandle) == HAL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Usart::deinit() {
|
void Usart::deinit() {
|
||||||
@@ -60,14 +76,9 @@ void Usart::println(const std::string_view str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Usart::tx(const std::string_view range) {
|
void Usart::tx(const std::string_view range) {
|
||||||
for (uint32_t pt{0}; pt <= range.size(); pt += TX_BUFSIZE) {
|
|
||||||
uint8_t txLen{TX_BUFSIZE};
|
HAL_UART_Transmit(&mHandle, reinterpret_cast<const uint8_t*>(range.begin()), range.size(),
|
||||||
if (range.length() < TX_BUFSIZE) {
|
|
||||||
txLen = range.length();
|
|
||||||
}
|
|
||||||
HAL_UART_Transmit(&mHandle, reinterpret_cast<const uint8_t*>(range.begin() + pt), txLen,
|
|
||||||
TX_TIMEOUT_MS);
|
TX_TIMEOUT_MS);
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace driver::usart
|
} // namespace driver::usart
|
@@ -25,6 +25,7 @@ target_sources(stm32cubemx INTERFACE
|
|||||||
../../Core/Src/stm32f4xx_it.c
|
../../Core/Src/stm32f4xx_it.c
|
||||||
../../Core/Src/stm32f4xx_hal_msp.c
|
../../Core/Src/stm32f4xx_hal_msp.c
|
||||||
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c
|
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c
|
||||||
|
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c
|
||||||
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
|
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
|
||||||
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
|
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
|
||||||
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
|
../../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
|
||||||
|
Reference in New Issue
Block a user