Advertisement
443eb9

Untitled

Jul 26th, 2023
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.11 KB | None | 0 0
  1. // Module.h (Module.cpp is empty)
  2. #ifndef STM32_HAL_MODULE_H
  3. #define STM32_HAL_MODULE_H
  4.  
  5. #include "main.h"
  6.  
  7. extern "C"
  8. {
  9. #define GENERAL_INIT                            \
  10. if (init == nullptr)                            \
  11. {                                               \
  12.     initTemplate.Mode = GPIO_MODE_OUTPUT_PP;    \
  13.     initTemplate.Pull = GPIO_PULLDOWN;          \
  14.     initTemplate.Speed = GPIO_SPEED_FREQ_LOW;   \
  15. }                                               \
  16. else                                            \
  17. {                                               \
  18.     initTemplate.Mode = init->Mode;             \
  19.     initTemplate.Pull = init->Pull;             \
  20.     initTemplate.Speed = init->Speed;           \
  21. }
  22.  
  23.    
  24. class Module
  25. {
  26. public:
  27.     GPIO_TypeDef *gpio;
  28.  
  29.     uint16_t pin;
  30.  
  31.     Module(GPIO_TypeDef *gpio, uint16_t pinAt) : gpio(gpio), pin(pinAt) {};
  32. };
  33. }
  34.  
  35. #endif
  36.  
  37. // Board.h
  38. #ifndef STM32_HAL_BOARD_H
  39. #define STM32_HAL_BOARD_H
  40.  
  41. #include "Led.h"
  42. #include "Button.h"
  43.  
  44. extern "C"
  45. {
  46. class Board
  47. {
  48. public:
  49.     Led led0;
  50.  
  51.     Led led1;
  52.  
  53.     Led buzzer0;
  54.  
  55.     Button button0;
  56.  
  57.     Button extiButton0;
  58.  
  59.     Board();
  60.  
  61.     static Board *mainBoard;
  62.  
  63.     [[noreturn]] void run();
  64. };
  65. }
  66.  
  67. #endif //STM32_HAL_BOARD_H
  68.  
  69.  
  70. // Board.cpp
  71. #include "Board.h"
  72.  
  73. Board *Board::mainBoard = new Board();
  74.  
  75. Board::Board()
  76. {
  77.     Led::initGpio(nullptr);
  78.     Button::initGpio(nullptr);
  79.  
  80.     led0 = Led(GPIO_PIN_0);
  81.     led1 = Led(GPIO_PIN_1);
  82.     buzzer0 = Led(GPIO_PIN_3);
  83.     button0 = Button(GPIO_PIN_2);
  84.     extiButton0 = Button(GPIO_PIN_15);
  85. }
  86.  
  87. [[noreturn]] void Board::run()
  88. {
  89.     while (true)
  90.     {
  91.         if (button0.isPressed())
  92.         {
  93.             led0.on();
  94.             led1.off();
  95.             buzzer0.toggle();
  96.             HAL_Delay(10);
  97.         }
  98.         else
  99.         {
  100.             led0.off();
  101.             led1.on();
  102.             buzzer0.off();
  103.         }
  104.  
  105.         if (extiButton0.isPressed())
  106.         {
  107.             led1.toggle();
  108.             HAL_Delay(100);
  109.         }
  110.     }
  111. }
  112.  
  113. // Led.h
  114. #ifndef STM32_HAL_LED_H
  115. #define STM32_HAL_LED_H
  116.  
  117. extern "C"
  118. {
  119. #include "Module.h"
  120.    
  121. class Led : public Module
  122. {
  123. public:
  124.     Led();
  125.     explicit Led(uint16_t pin);
  126.  
  127.     void on() const;
  128.     void off() const;
  129.     void toggle() const;
  130.  
  131.     static GPIO_InitTypeDef initTemplate;
  132.  
  133.     static void initGpio(GPIO_InitTypeDef *init);
  134. };
  135. }
  136.  
  137. #endif
  138.  
  139. // Led.cpp
  140. #include "Led.h"
  141.  
  142. GPIO_InitTypeDef Led::initTemplate;
  143.  
  144. Led::Led() : Module(GPIOA, GPIO_PIN_0) {}
  145.  
  146. Led::Led(uint16_t pin) : Module(GPIOA, pin)
  147. {
  148.     __HAL_RCC_GPIOA_CLK_ENABLE();
  149.  
  150.     GPIO_InitTypeDef init;
  151.     init.Mode = initTemplate.Mode;
  152.     init.Pull = initTemplate.Pull;
  153.     init.Speed = initTemplate.Speed;
  154.     init.Pin = pin;
  155.     HAL_GPIO_Init(GPIOA, &init);
  156. }
  157.  
  158. void Led::initGpio(GPIO_InitTypeDef *init = nullptr)
  159. {
  160.     GENERAL_INIT
  161. }
  162.  
  163. void Led::on() const
  164. {
  165.     HAL_GPIO_WritePin(GPIOA, pin, GPIO_PIN_RESET);
  166. }
  167.  
  168. void Led::off() const
  169. {
  170.     HAL_GPIO_WritePin(GPIOA, pin, GPIO_PIN_SET);
  171. }
  172.  
  173. void Led::toggle() const
  174. {
  175.     HAL_GPIO_TogglePin(GPIOA, pin);
  176. }
  177.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement