Make it work

This commit is contained in:
Attila Body 2025-05-28 09:13:56 +02:00
parent 2b17bb1dae
commit 340f0329fa
Signed by: abody
GPG key ID: BD0C6214E68FB5CF
11 changed files with 187 additions and 125 deletions

33
.clang-format Normal file
View file

@ -0,0 +1,33 @@
BasedOnStyle: LLVM
UseTab: Never
IndentWidth: 2
TabWidth: 2
BreakBeforeBraces: Custom
AllowShortFunctionsOnASingleLine: InlineOnly
AllowShortIfStatementsOnASingleLine: false
AllowShortLambdasOnASingleLine: true
AllowAllArgumentsOnNextLine: true
IndentCaseLabels: true
AccessModifierOffset: -2
NamespaceIndentation: None
FixNamespaceComments: false
PackConstructorInitializers: Never
AlignAfterOpenBracket: AlwaysBreak
InsertBraces: true
BraceWrapping:
AfterClass: true # false
AfterControlStatement: false
AfterEnum: true # false
AfterFunction: true # false
AfterNamespace: false
AfterObjCDeclaration: true # false
AfterStruct: true # false
AfterUnion: true # false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
ColumnLimit: 140

View file

@ -5,5 +5,6 @@
],
"cmake.preferredGenerators": [
"Ninja"
]
],
"sonarlint.pathToCompileCommands": "${workspaceFolder}/compile_commands.json"
}

View file

@ -19,8 +19,8 @@
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "dma.h"
#include "gpio.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
@ -57,21 +57,15 @@ void SystemClock_Config(void);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void SendStr(char const *str) {
while (*str) {
LL_USART_ClearFlag_TC(USART1);
LL_USART_TransmitData8(USART1, *str++);
while (!LL_USART_IsActiveFlag_TC(USART1))
;
}
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void) {
int main(void)
{
/* USER CODE BEGIN 1 */
@ -79,8 +73,7 @@ int main(void) {
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick.
*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_AFIO);
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
@ -123,20 +116,26 @@ int main(void) {
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void) {
void SystemClock_Config(void)
{
LL_FLASH_SetLatency(LL_FLASH_LATENCY_2);
while (LL_FLASH_GetLatency() != LL_FLASH_LATENCY_2) {
while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_2)
{
}
LL_RCC_HSE_Enable();
/* Wait till HSE is ready */
while (LL_RCC_HSE_IsReady() != 1) {
while(LL_RCC_HSE_IsReady() != 1)
{
}
LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE_DIV_1, LL_RCC_PLL_MUL_9);
LL_RCC_PLL_Enable();
/* Wait till PLL is ready */
while (LL_RCC_PLL_IsReady() != 1) {
while(LL_RCC_PLL_IsReady() != 1)
{
}
LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);
@ -144,7 +143,9 @@ void SystemClock_Config(void) {
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
/* Wait till System clock is ready */
while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) {
while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
{
}
LL_Init1msTick(72000000);
LL_SetSystemCoreClock(72000000);
@ -158,7 +159,8 @@ void SystemClock_Config(void) {
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void) {
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
@ -175,7 +177,8 @@ void Error_Handler(void) {
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line) {
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line
number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file,

View file

@ -18,9 +18,8 @@
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_it.h"
#include "main.h"
#include "stm32f1xx_it.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
@ -70,7 +69,8 @@
/**
* @brief This function handles Non maskable interrupt.
*/
void NMI_Handler(void) {
void NMI_Handler(void)
{
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
/* USER CODE END NonMaskableInt_IRQn 0 */
@ -83,11 +83,13 @@ void NMI_Handler(void) {
/**
* @brief This function handles Hard fault interrupt.
*/
void HardFault_Handler(void) {
void HardFault_Handler(void)
{
/* USER CODE BEGIN HardFault_IRQn 0 */
/* USER CODE END HardFault_IRQn 0 */
while (1) {
while (1)
{
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
/* USER CODE END W1_HardFault_IRQn 0 */
}
@ -96,11 +98,13 @@ void HardFault_Handler(void) {
/**
* @brief This function handles Memory management fault.
*/
void MemManage_Handler(void) {
void MemManage_Handler(void)
{
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
/* USER CODE END MemoryManagement_IRQn 0 */
while (1) {
while (1)
{
/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
/* USER CODE END W1_MemoryManagement_IRQn 0 */
}
@ -109,11 +113,13 @@ void MemManage_Handler(void) {
/**
* @brief This function handles Prefetch fault, memory access fault.
*/
void BusFault_Handler(void) {
void BusFault_Handler(void)
{
/* USER CODE BEGIN BusFault_IRQn 0 */
/* USER CODE END BusFault_IRQn 0 */
while (1) {
while (1)
{
/* USER CODE BEGIN W1_BusFault_IRQn 0 */
/* USER CODE END W1_BusFault_IRQn 0 */
}
@ -122,11 +128,13 @@ void BusFault_Handler(void) {
/**
* @brief This function handles Undefined instruction or illegal state.
*/
void UsageFault_Handler(void) {
void UsageFault_Handler(void)
{
/* USER CODE BEGIN UsageFault_IRQn 0 */
/* USER CODE END UsageFault_IRQn 0 */
while (1) {
while (1)
{
/* USER CODE BEGIN W1_UsageFault_IRQn 0 */
/* USER CODE END W1_UsageFault_IRQn 0 */
}
@ -135,7 +143,8 @@ void UsageFault_Handler(void) {
/**
* @brief This function handles System service call via SWI instruction.
*/
void SVC_Handler(void) {
void SVC_Handler(void)
{
/* USER CODE BEGIN SVCall_IRQn 0 */
/* USER CODE END SVCall_IRQn 0 */
@ -147,7 +156,8 @@ void SVC_Handler(void) {
/**
* @brief This function handles Debug monitor.
*/
void DebugMon_Handler(void) {
void DebugMon_Handler(void)
{
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
/* USER CODE END DebugMonitor_IRQn 0 */
@ -159,7 +169,8 @@ void DebugMon_Handler(void) {
/**
* @brief This function handles Pendable request for system service.
*/
void PendSV_Handler(void) {
void PendSV_Handler(void)
{
/* USER CODE BEGIN PendSV_IRQn 0 */
/* USER CODE END PendSV_IRQn 0 */
@ -171,7 +182,8 @@ void PendSV_Handler(void) {
/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void) {
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
@ -191,7 +203,8 @@ void SysTick_Handler(void) {
/**
* @brief This function handles DMA1 channel4 global interrupt.
*/
void DMA1_Channel4_IRQHandler(void) {
void DMA1_Channel4_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
dma1_channel4_irq_handler();
/* USER CODE END DMA1_Channel4_IRQn 0 */
@ -203,7 +216,8 @@ void DMA1_Channel4_IRQHandler(void) {
/**
* @brief This function handles DMA1 channel5 global interrupt.
*/
void DMA1_Channel5_IRQHandler(void) {
void DMA1_Channel5_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
dma1_channel5_irq_handler();
/* USER CODE END DMA1_Channel5_IRQn 0 */
@ -215,9 +229,10 @@ void DMA1_Channel5_IRQHandler(void) {
/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void) {
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
usart1_irq_handler();
/* USER CODE END USART1_IRQn 0 */
/* USER CODE BEGIN USART1_IRQn 1 */

View file

@ -7,6 +7,7 @@ extern "C" {
void dma1_channel4_irq_handler();
void dma1_channel5_irq_handler();
void usart1_irq_handler();
#if defined(__cplusplus)
}

View file

@ -4,7 +4,8 @@
#include <f1ll/console_handler.h>
void app_main() {
void app_main()
{
f1ll::console_handler::init(USART1, DMA1, LL_DMA_CHANNEL_5, LL_DMA_CHANNEL_4);
while (true) {

View file

@ -2,10 +2,17 @@
#include <f1ll/console_handler.h>
void dma1_channel4_irq_handler() {
void dma1_channel4_irq_handler()
{
f1ll::console_handler::instance().tx_dma_isr();
}
void dma1_channel5_irq_handler() {
void dma1_channel5_irq_handler()
{
f1ll::console_handler::instance().rx_dma_isr();
}
void usart1_irq_handler()
{
f1ll::console_handler::instance().usart_isr();
}

View file

@ -13,15 +13,15 @@
namespace f1ll {
class console_handler : public usart_core, public singleton<console_handler> {
class console_handler : public usart_core, public singleton<console_handler>
{
friend class singleton<console_handler>;
public:
void print(char const *s);
private:
console_handler(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t channelRx,
uint32_t channelTx);
console_handler(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t channelRx, uint32_t channelTx);
// LL_UsartCore pure virtual function implementations
virtual void receiver_idle(void);

View file

@ -11,12 +11,11 @@
#include <inttypes.h>
#include <platform/dma_ll.h>
namespace f1ll
{
namespace f1ll {
class dma_helper
{
public:
class dma_helper
{
public:
dma_helper(DMA_TypeDef *dma, uint32_t channel);
dma_helper(dma_helper const &base) = default;
@ -33,7 +32,7 @@ namespace f1ll
inline bool is_enabled_it_ht() { return LL_DMA_IsEnabledIT_HT(m_dma, m_channel) != 0; }
inline bool is_enabled_it_tc() { return LL_DMA_IsEnabledIT_TC(m_dma, m_channel) != 0; }
private:
private:
DMA_TypeDef *m_dma;
uint32_t m_channel;
volatile uint32_t *m_is_reg;
@ -43,7 +42,7 @@ namespace f1ll
static const uint32_t m_ht_masks[7];
static const uint32_t m_tc_masks[7];
static const uint32_t m_gi_masks[7];
};
};
} /* namespace f4ll */

View file

@ -3,10 +3,12 @@
#include <utility>
template <typename T> class singleton {
template <typename T> class singleton
{
public:
static T &instance() { return *m_instance; }
template <typename... args_t> static T &init(args_t &&...args) {
template <typename... args_t> static T &init(args_t &&...args)
{
static T instance{std::forward<args_t>(args)...};
m_instance = &instance;
return instance;

View file

@ -13,7 +13,8 @@
namespace f1ll {
class usart_core {
class usart_core
{
public:
static inline void usart_irq(usart_core *_this) { _this->usart_isr(); }
static inline void rx_dma_irq(usart_core *_this) { _this->rx_dma_isr(); }
@ -23,8 +24,7 @@ public:
void setup_receive(void *buffer, uint16_t length);
protected:
usart_core(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t channel_rx,
uint32_t stream_tx);
usart_core(USART_TypeDef *usart, DMA_TypeDef *dma, uint32_t channel_rx, uint32_t stream_tx);
USART_TypeDef *m_usart;
dma_helper m_rxDma;