gestione ciclo
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
280057
workspace/.metadata/.ide.log
280057
workspace/.metadata/.ide.log
File diff suppressed because it is too large
Load Diff
12899
workspace/.metadata/.ide.log-2025-12-24.log
Normal file
12899
workspace/.metadata/.ide.log-2025-12-24.log
Normal file
File diff suppressed because it is too large
Load Diff
24973
workspace/.metadata/.ide.log-2026-03-07.log
Normal file
24973
workspace/.metadata/.ide.log-2026-03-07.log
Normal file
File diff suppressed because one or more lines are too long
56
workspace/.metadata/.ide.log-2026-04-12.log
Normal file
56
workspace/.metadata/.ide.log-2026-04-12.log
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
2026-04-14 07:55:53,761 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:53,917 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:54,260 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:54,262 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:54,481 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:54,481 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:54,681 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:54,681 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:54,864 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:54,864 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,078 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,078 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,185 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,185 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,294 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,296 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,399 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,399 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,491 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,493 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,583 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,583 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,683 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,683 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,783 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,783 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,884 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,886 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:55,980 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:55,980 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,102 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,102 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,328 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,328 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,426 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,428 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,509 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,509 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,614 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,614 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,674 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,674 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,734 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,734 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,797 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,799 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,868 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,868 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:56,943 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:56,943 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:57,005 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:57,005 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:57,055 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:57,058 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-14 07:55:57,120 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-14 07:55:57,120 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
60
workspace/.metadata/.ide.log-2026-04-13.log
Normal file
60
workspace/.metadata/.ide.log-2026-04-13.log
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
2026-04-13 04:30:36,588 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,595 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,628 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,628 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,656 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,656 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,689 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,689 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,726 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,726 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,756 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,756 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,794 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,794 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,844 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,844 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,885 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,885 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,922 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,922 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:36,954 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:36,954 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,002 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,002 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,041 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,041 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,078 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,078 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,124 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,124 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,171 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,171 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,213 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,213 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,250 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,250 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,284 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,284 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,325 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,325 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,361 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,361 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,400 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,400 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,439 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,439 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,476 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,476 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,560 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,560 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,625 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,625 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,668 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,670 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,709 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,709 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,745 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,745 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
|
2026-04-13 04:30:37,781 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] [Fatal Error] :1:1: Premature end of file.
|
||||||
|
2026-04-13 04:30:37,781 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT]
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -13,3 +13,7 @@
|
|||||||
*** SESSION dic 08, 2025 13:49:44.543 ------------------------------------------
|
*** SESSION dic 08, 2025 13:49:44.543 ------------------------------------------
|
||||||
*** SESSION dic 24, 2025 16:22:32.878 ------------------------------------------
|
*** SESSION dic 24, 2025 16:22:32.878 ------------------------------------------
|
||||||
*** SESSION dic 24, 2025 18:17:23.377 ------------------------------------------
|
*** SESSION dic 24, 2025 18:17:23.377 ------------------------------------------
|
||||||
|
*** SESSION dic 24, 2025 23:43:28.279 ------------------------------------------
|
||||||
|
*** SESSION mar 07, 2026 09:31:21.846 ------------------------------------------
|
||||||
|
*** SESSION mar 07, 2026 09:55:51.295 ------------------------------------------
|
||||||
|
*** SESSION apr 12, 2026 22:09:33.269 ------------------------------------------
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<section name="Workbench">
|
||||||
|
</section>
|
||||||
@@ -1,17 +1,19 @@
|
|||||||
19:34:52 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
11:50:42 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
||||||
make -j12 all
|
make -j12 all
|
||||||
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
||||||
|
arm-none-eabi-gcc "../Core/Src/main.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/main.d" -MT"Core/Src/main.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/main.o"
|
||||||
|
arm-none-eabi-gcc "../Core/Src/pwm.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/pwm.d" -MT"Core/Src/pwm.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/pwm.o"
|
||||||
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
||||||
Finished building target: AUTOM10.elf
|
Finished building target: AUTOM10.elf
|
||||||
|
|
||||||
arm-none-eabi-size AUTOM10.elf
|
arm-none-eabi-size AUTOM10.elf
|
||||||
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
||||||
text data bss dec hex filename
|
text data bss dec hex filename
|
||||||
48792 464 7248 56504 dcb8 AUTOM10.elf
|
49908 464 7248 57620 e114 AUTOM10.elf
|
||||||
Finished building: default.size.stdout
|
Finished building: default.size.stdout
|
||||||
|
|
||||||
Finished building: AUTOM10.list
|
Finished building: AUTOM10.list
|
||||||
|
|
||||||
|
|
||||||
19:34:58 Build Finished. 0 errors, 0 warnings. (took 5s.556ms)
|
11:50:43 Build Finished. 0 errors, 0 warnings. (took 865ms)
|
||||||
|
|
||||||
|
|||||||
@@ -33,4 +33,8 @@
|
|||||||
<item key="DIALOG_HEIGHT" value="480"/>
|
<item key="DIALOG_HEIGHT" value="480"/>
|
||||||
<item key="DIALOG_FONT_NAME" value="1|Segoe UI|9.0|0|WINDOWS|1|-15|0|0|0|400|0|0|0|1|0|0|0|0|Segoe UI"/>
|
<item key="DIALOG_FONT_NAME" value="1|Segoe UI|9.0|0|WINDOWS|1|-15|0|0|0|400|0|0|0|1|0|0|0|0|Segoe UI"/>
|
||||||
</section>
|
</section>
|
||||||
|
<section name="org.eclipse.cdt.ui.text.hover.CMacroExpansionExploration.internal">
|
||||||
|
<item key="size.width" value="595"/>
|
||||||
|
<item key="size.height" value="180"/>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -1,48 +1,15 @@
|
|||||||
16:32:16 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
11:50:42 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
||||||
make -j12 all
|
make -j12 all
|
||||||
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
||||||
|
arm-none-eabi-gcc "../Core/Src/main.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/main.d" -MT"Core/Src/main.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/main.o"
|
||||||
|
arm-none-eabi-gcc "../Core/Src/pwm.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/pwm.d" -MT"Core/Src/pwm.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/pwm.o"
|
||||||
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
||||||
Finished building target: AUTOM10.elf
|
Finished building target: AUTOM10.elf
|
||||||
|
|
||||||
arm-none-eabi-size AUTOM10.elf
|
arm-none-eabi-size AUTOM10.elf
|
||||||
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
||||||
text data bss dec hex filename
|
text data bss dec hex filename
|
||||||
48788 464 7248 56500 dcb4 AUTOM10.elf
|
49908 464 7248 57620 e114 AUTOM10.elf
|
||||||
Finished building: default.size.stdout
|
|
||||||
|
|
||||||
Finished building: AUTOM10.list
|
|
||||||
|
|
||||||
16:33:18 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
|
||||||
make -j12 all
|
|
||||||
arm-none-eabi-size AUTOM10.elf
|
|
||||||
text data bss dec hex filename
|
|
||||||
48788 464 7248 56500 dcb4 AUTOM10.elf
|
|
||||||
Finished building: default.size.stdout
|
|
||||||
|
|
||||||
16:34:44 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
|
||||||
make -j12 all
|
|
||||||
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
|
||||||
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
|
||||||
Finished building target: AUTOM10.elf
|
|
||||||
|
|
||||||
arm-none-eabi-size AUTOM10.elf
|
|
||||||
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
|
||||||
text data bss dec hex filename
|
|
||||||
48788 464 7248 56500 dcb4 AUTOM10.elf
|
|
||||||
Finished building: default.size.stdout
|
|
||||||
|
|
||||||
Finished building: AUTOM10.list
|
|
||||||
|
|
||||||
19:34:52 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
|
||||||
make -j12 all
|
|
||||||
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
|
||||||
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
|
||||||
Finished building target: AUTOM10.elf
|
|
||||||
|
|
||||||
arm-none-eabi-size AUTOM10.elf
|
|
||||||
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
|
||||||
text data bss dec hex filename
|
|
||||||
48792 464 7248 56504 dcb8 AUTOM10.elf
|
|
||||||
Finished building: default.size.stdout
|
Finished building: default.size.stdout
|
||||||
|
|
||||||
Finished building: AUTOM10.list
|
Finished building: AUTOM10.list
|
||||||
|
|||||||
@@ -0,0 +1,724 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstop,
|
||||||
|
}omciclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bz moving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P1START);
|
||||||
|
if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P2START);
|
||||||
|
if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
break;
|
||||||
|
case omstop:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,223 @@
|
|||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
|
||||||
|
extern TIM_HandleTypeDef htim1;
|
||||||
|
extern TIM_HandleTypeDef htim2;
|
||||||
|
extern TIM_HandleTypeDef htim3;
|
||||||
|
extern TIM_HandleTypeDef htim4;
|
||||||
|
extern const uint16_t EE_VirtAddrs[];
|
||||||
|
extern uint8_t pulsanti;
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
extern const uint8_t deftab[];
|
||||||
|
|
||||||
|
bool toHex(char c1,char c2,char c3,char c4,uint16_t* retval){
|
||||||
|
if((c1>='0')&&(c1<='9')){
|
||||||
|
c1-='0';
|
||||||
|
}else if((c1>='a')&&(c1<='f')){
|
||||||
|
c1=(c1-'a')+10;
|
||||||
|
}else return false;
|
||||||
|
|
||||||
|
if((c2>='0')&&(c2<='9')){
|
||||||
|
c2-='0';
|
||||||
|
}else if((c2>='a')&&(c2<='f')){
|
||||||
|
c2=(c2-'a')+10;
|
||||||
|
}else return false;
|
||||||
|
|
||||||
|
if((c3>='0')&&(c3<='9')){
|
||||||
|
c3-='0';
|
||||||
|
}else if((c3>='a')&&(c3<='f')){
|
||||||
|
c3=(c3-'a')+10;
|
||||||
|
}else return false;
|
||||||
|
|
||||||
|
if((c4>='0')&&(c4<='9')){
|
||||||
|
c4-='0';
|
||||||
|
}else if((c4>='a')&&(c4<='f')){
|
||||||
|
c4=(c4-'a')+10;
|
||||||
|
}else return false;
|
||||||
|
|
||||||
|
*retval=c1;
|
||||||
|
*retval*=16;
|
||||||
|
*retval+=c2;
|
||||||
|
*retval*=16;
|
||||||
|
*retval+=c3;
|
||||||
|
*retval*=16;
|
||||||
|
*retval+=c4;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCDC(void){
|
||||||
|
static uint8_t rxbuf[100];
|
||||||
|
static uint8_t rxidx=0;
|
||||||
|
unsigned char s[100];
|
||||||
|
uint8_t mot,dir,dm,m,c,d,u;
|
||||||
|
uint16_t val;
|
||||||
|
uint16_t st;
|
||||||
|
uint16_t eeadd;
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
if (CDC_Available()) {
|
||||||
|
int rx = CDC_ReadByte();
|
||||||
|
if (rx < 0) return;
|
||||||
|
//uint8_t out = (uint8_t)c;
|
||||||
|
//if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
rxbuf[rxidx]=rx;
|
||||||
|
while (CDC_Transmit_FS(&rxbuf[rxidx], 1) == USBD_BUSY);//echo
|
||||||
|
if((rx==0x0d)||(rx==0x0a)){
|
||||||
|
if(rxidx){
|
||||||
|
switch(rxbuf[0]){
|
||||||
|
case 'i':
|
||||||
|
sprintf((char*)s,"info\n");
|
||||||
|
while (CDC_Transmit_FS(s, 5) == USBD_BUSY);
|
||||||
|
sprintf((char*)s,"\npwm %d%d%d%d%d%d%d%d",IsPwmRunning(timMot1,FWMot1),IsPwmRunning(timMot1,BWMot1),IsPwmRunning(timMot2,FWMot2),IsPwmRunning(timMot2,BWMot2),IsPwmRunning(timMot3,FWMot3),IsPwmRunning(timMot3,BWMot3),IsPwmRunning(timMot4,FWMot4),IsPwmRunning(timMot4,BWMot4));
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
sprintf((char*)s,"\n0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx",(uint32_t)__HAL_TIM_GET_COMPARE(timMot1,FWMot1),(uint32_t)__HAL_TIM_GET_COMPARE(timMot1,BWMot1),(uint32_t)__HAL_TIM_GET_COMPARE(timMot2,FWMot2),(uint32_t)__HAL_TIM_GET_COMPARE(timMot2,BWMot2),(uint32_t)__HAL_TIM_GET_COMPARE(timMot3,FWMot3),(uint32_t)__HAL_TIM_GET_COMPARE(timMot3,BWMot3),(uint32_t)__HAL_TIM_GET_COMPARE(timMot4,FWMot4),(uint32_t)__HAL_TIM_GET_COMPARE(timMot4,BWMot4));
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
sprintf((char*)s,"\nP=0x%x ch4=%05d ch5=%05d ch6=%05d ch7=%05d ch8=%05d",pulsanti,ch4,ch5,ch6,ch7,ch8);
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
sprintf((char*)s,"\nID000000");
|
||||||
|
while (CDC_Transmit_FS(s, 9) == USBD_BUSY);
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
if(rxidx==8){
|
||||||
|
if((rxbuf[1]>='1')&&(rxbuf[1]<='4')){
|
||||||
|
mot=rxbuf[1]-='0';
|
||||||
|
if(rxbuf[2]=='f'){
|
||||||
|
dir=FW;
|
||||||
|
}else if(rxbuf[2]=='b'){
|
||||||
|
dir=BW;
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?mnsvvvvv s=f|b");//m nmotore senso valore
|
||||||
|
while (CDC_Transmit_FS(s, 16) == USBD_BUSY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(((rxbuf[3]>='0')&&(rxbuf[3]<='9'))&&((rxbuf[4]>='0')&&(rxbuf[4]<='9'))&&((rxbuf[5]>='0')&&(rxbuf[5]<='9'))&&((rxbuf[6]>='0')&&(rxbuf[6]<='9'))&&((rxbuf[7]>='0')&&(rxbuf[7]<='9'))){
|
||||||
|
dm=rxbuf[3]-='0';
|
||||||
|
m=rxbuf[4]-='0';
|
||||||
|
c=rxbuf[5]-='0';
|
||||||
|
d=rxbuf[6]-='0';
|
||||||
|
u=rxbuf[7]-='0';
|
||||||
|
val=dm;
|
||||||
|
val*=10;
|
||||||
|
val+=m;
|
||||||
|
val*=10;
|
||||||
|
val+=c;
|
||||||
|
val*=10;
|
||||||
|
val+=d;
|
||||||
|
val*=10;
|
||||||
|
val+=u;
|
||||||
|
SetMot(mot,dir,val);
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?mnsvvvvv 00000>=vvvvv<=99999");//m nmotore senso valore
|
||||||
|
while (CDC_Transmit_FS(s, 19) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?mnsvvvvv 1>=m<=4");//m nmotore senso valore
|
||||||
|
while (CDC_Transmit_FS(s, 19) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?mnsvvvvv");//m nmotore senso valore
|
||||||
|
while (CDC_Transmit_FS(s, 10) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'e':
|
||||||
|
if(rxidx>1){
|
||||||
|
if(rxbuf[1]=='r'){
|
||||||
|
if(rxidx==4){
|
||||||
|
if(toHex('0','0',rxbuf[2],rxbuf[3],&eeadd)){
|
||||||
|
st=EEW_Read(eeadd, &val);
|
||||||
|
if (st == EE_OK){
|
||||||
|
sprintf((char*)s,"\nee 0x%02x=0x%04x",eeadd,val);
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\nee read error %d",st);
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?eraa hex values");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?eraa");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else if(rxbuf[1]=='w'){
|
||||||
|
if(rxidx==8){
|
||||||
|
if(toHex('0','0',rxbuf[2],rxbuf[3],&eeadd)){
|
||||||
|
if(toHex(rxbuf[4],rxbuf[5],rxbuf[6],rxbuf[7],&val)){
|
||||||
|
st=EEW_Write(eeadd, val);
|
||||||
|
if (st == EE_OK)sprintf((char*)s,"\ndone 0x%02x=0x%04x",eeadd,val);
|
||||||
|
else sprintf((char*)s,"\nee write error %d", st);
|
||||||
|
}else sprintf((char*)s,"\n?ewaavvvv hex values");
|
||||||
|
}else sprintf((char*)s,"\n?ewaa hex values");
|
||||||
|
}else sprintf((char*)s,"\n?ewaavvvv");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}else if(rxbuf[1]=='d'){
|
||||||
|
if(rxidx==2){
|
||||||
|
for(i=0;i<32;i++){
|
||||||
|
st=EEW_Read(i, &val);
|
||||||
|
if (st == EE_OK){
|
||||||
|
sprintf((char*)s,"0x%02x=0x%04x ",i,val);
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"rderr %d ",st);
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((i%4)==0){
|
||||||
|
sprintf((char*)s,"\n");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?ed");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else if(rxbuf[1]=='x'){
|
||||||
|
if(rxidx==2){
|
||||||
|
for(i=0;i<32;i++){
|
||||||
|
st=EEW_Write(i,deftab[i]);
|
||||||
|
if (st == EE_OK)sprintf((char*)s,"\ndone 0x%02x=0x%04x",i,deftab[i]);
|
||||||
|
else sprintf((char*)s,"\nee write error %d", st);
|
||||||
|
sprintf((char*)s,"\n");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?ex");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?er|w|d|x");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?eraa | ewaavvvv");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sprintf((char*)s,"\n?");
|
||||||
|
while (CDC_Transmit_FS(s, 2) == USBD_BUSY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rxidx=0;
|
||||||
|
}else rxidx++;
|
||||||
|
// tiny spin or yield
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,746 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P1START);
|
||||||
|
if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P2START);
|
||||||
|
if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,336 @@
|
|||||||
|
#include "eeprom.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Record format (4 bytes):
|
||||||
|
* [0] VirtAddress (uint16_t)
|
||||||
|
* [2] Data (uint16_t)
|
||||||
|
*
|
||||||
|
* Page layout:
|
||||||
|
* [0] PageStatus (uint16_t)
|
||||||
|
* [2..] Records...
|
||||||
|
*/
|
||||||
|
|
||||||
|
const uint8_t deftab[32]={
|
||||||
|
40, //m1pwmap
|
||||||
|
60, //m1pwmch
|
||||||
|
50, //m2pwmap
|
||||||
|
50, //m2pwmch
|
||||||
|
40, //m3pwmap
|
||||||
|
40, //m3pwmch
|
||||||
|
40, //m4pwmap
|
||||||
|
40, //m4pwmch
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t VirtAddress;
|
||||||
|
uint16_t Data;
|
||||||
|
} EE_Record_t;
|
||||||
|
|
||||||
|
/* Active page base address (runtime selected in EE_Init) */
|
||||||
|
static uint32_t EE_ActivePageBase = EE_PAGE0_BASE;
|
||||||
|
|
||||||
|
/* 32 sequential virtual addresses */
|
||||||
|
const uint16_t EE_VirtAddrs[EE_NUM_VIRTUAL_ADDR] =
|
||||||
|
{
|
||||||
|
0x0001, 0x0002, 0x0003, 0x0004,
|
||||||
|
0x0005, 0x0006, 0x0007, 0x0008,
|
||||||
|
0x0009, 0x000A, 0x000B, 0x000C,
|
||||||
|
0x000D, 0x000E, 0x000F, 0x0010,
|
||||||
|
0x0011, 0x0012, 0x0013, 0x0014,
|
||||||
|
0x0015, 0x0016, 0x0017, 0x0018,
|
||||||
|
0x0019, 0x001A, 0x001B, 0x001C,
|
||||||
|
0x001D, 0x001E, 0x001F, 0x0020
|
||||||
|
};
|
||||||
|
/* ========================================================================= */
|
||||||
|
|
||||||
|
/* --- Internal helpers ---------------------------------------------------- */
|
||||||
|
|
||||||
|
static uint16_t EE_GetPageStatus(uint32_t pageBase)
|
||||||
|
{
|
||||||
|
return *(__IO uint16_t *)pageBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HAL_StatusTypeDef EE_FlashProgramHalfWord(uint32_t Address, uint16_t Data)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef status;
|
||||||
|
|
||||||
|
HAL_FLASH_Unlock();
|
||||||
|
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Address, Data);
|
||||||
|
HAL_FLASH_Lock();
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HAL_StatusTypeDef EE_FlashErasePage(uint32_t PageAddress)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef status;
|
||||||
|
FLASH_EraseInitTypeDef EraseInit;
|
||||||
|
uint32_t PageError = 0;
|
||||||
|
|
||||||
|
HAL_FLASH_Unlock();
|
||||||
|
|
||||||
|
EraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
|
||||||
|
EraseInit.PageAddress = PageAddress;
|
||||||
|
EraseInit.NbPages = 1;
|
||||||
|
|
||||||
|
status = HAL_FLASHEx_Erase(&EraseInit, &PageError);
|
||||||
|
|
||||||
|
HAL_FLASH_Lock();
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find first free record address in given page (returns 0 if full) */
|
||||||
|
static uint32_t EE_FindFreeAddress(uint32_t pageBase)
|
||||||
|
{
|
||||||
|
uint32_t addr = pageBase + 2U; /* Skip status word */
|
||||||
|
uint32_t pageEnd = pageBase + EE_PAGE_SIZE;
|
||||||
|
|
||||||
|
while (addr < (pageEnd - sizeof(EE_Record_t) + 1U))
|
||||||
|
{
|
||||||
|
uint16_t vaddr = *(__IO uint16_t *)addr;
|
||||||
|
|
||||||
|
if (vaddr == 0xFFFFU)
|
||||||
|
{
|
||||||
|
/* Empty slot */
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
addr += sizeof(EE_Record_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0U; /* No space */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find latest value of VirtAddress in a specific page (internal, uses EE_Status) */
|
||||||
|
/* Find latest value of VirtAddress in a specific page (scan forward) */
|
||||||
|
static EE_Status EE_FindInPage(uint32_t pageBase, uint16_t VirtAddress, uint16_t *Data)
|
||||||
|
{
|
||||||
|
uint32_t addr = pageBase + 2U; // skip status halfword
|
||||||
|
uint32_t pageEnd = pageBase + EE_PAGE_SIZE;
|
||||||
|
EE_Status result = EE_NOT_FOUND;
|
||||||
|
uint16_t lastVal = 0;
|
||||||
|
|
||||||
|
if (Data == NULL)
|
||||||
|
return EE_ERROR;
|
||||||
|
|
||||||
|
while (addr <= (pageEnd - sizeof(EE_Record_t)))
|
||||||
|
{
|
||||||
|
uint16_t vaddr = *(__IO uint16_t *)addr;
|
||||||
|
|
||||||
|
if (vaddr == 0xFFFFU)
|
||||||
|
{
|
||||||
|
// First empty slot => no more records in this page
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t value = *(__IO uint16_t *)(addr + 2U);
|
||||||
|
|
||||||
|
if (vaddr == VirtAddress)
|
||||||
|
{
|
||||||
|
lastVal = value; // keep most recent
|
||||||
|
result = EE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
addr += sizeof(EE_Record_t); // move 4 bytes forward
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == EE_OK)
|
||||||
|
*Data = lastVal;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Format both pages: erase and set PAGE0 as VALID */
|
||||||
|
static EE_Status EE_Format(void)
|
||||||
|
{
|
||||||
|
if (EE_FlashErasePage(EE_PAGE0_BASE) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
if (EE_FlashErasePage(EE_PAGE1_BASE) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
if (EE_FlashProgramHalfWord(EE_PAGE0_BASE, EE_PAGE_STATUS_VALID) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
/* PAGE1 will remain erased (status = 0xFFFF) */
|
||||||
|
EE_ActivePageBase = EE_PAGE0_BASE;
|
||||||
|
|
||||||
|
return EE_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the base of the other page */
|
||||||
|
static uint32_t EE_GetOtherPageBase(uint32_t pageBase)
|
||||||
|
{
|
||||||
|
return (pageBase == EE_PAGE0_BASE) ? EE_PAGE1_BASE : EE_PAGE0_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Page transfer (garbage collection + new write) */
|
||||||
|
static EE_Status EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
|
||||||
|
{
|
||||||
|
uint32_t oldBase = EE_ActivePageBase;
|
||||||
|
uint32_t newBase = EE_GetOtherPageBase(oldBase);
|
||||||
|
uint32_t addr;
|
||||||
|
uint16_t value;
|
||||||
|
EE_Status st;
|
||||||
|
|
||||||
|
/* Erase new page */
|
||||||
|
if (EE_FlashErasePage(newBase) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
/* Mark new page as RECEIVE */
|
||||||
|
if (EE_FlashProgramHalfWord(newBase, EE_PAGE_STATUS_RECEIVE) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
/* Start writing records just after status */
|
||||||
|
addr = newBase + 2U;
|
||||||
|
|
||||||
|
/* For each known virtual variable */
|
||||||
|
for (uint16_t i = 0; i < EE_NUM_VIRTUAL_ADDR; i++)
|
||||||
|
{
|
||||||
|
uint16_t vaddr = EE_VirtAddrs[i];
|
||||||
|
|
||||||
|
if (vaddr == VirtAddress)
|
||||||
|
{
|
||||||
|
/* Use the new data passed into PageTransfer */
|
||||||
|
value = Data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Read latest value from old active page */
|
||||||
|
st = EE_FindInPage(oldBase, vaddr, &value);
|
||||||
|
if (st != EE_STATUS_OK)
|
||||||
|
{
|
||||||
|
/* Variable never written -> skip */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write record to new page */
|
||||||
|
if (EE_FlashProgramHalfWord(addr, vaddr) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
if (EE_FlashProgramHalfWord(addr + 2U, value) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
addr += sizeof(EE_Record_t);
|
||||||
|
if (addr >= (newBase + EE_PAGE_SIZE))
|
||||||
|
return EE_STATUS_NO_SPACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Erase old page */
|
||||||
|
if (EE_FlashErasePage(oldBase) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
/* Mark new page as VALID */
|
||||||
|
if (EE_FlashProgramHalfWord(newBase, EE_PAGE_STATUS_VALID) != HAL_OK)
|
||||||
|
return EE_STATUS_ERROR;
|
||||||
|
|
||||||
|
/* Update active page */
|
||||||
|
EE_ActivePageBase = newBase;
|
||||||
|
|
||||||
|
return EE_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Public API ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the EEPROM emulation.
|
||||||
|
* - Checks page statuses and chooses the active page.
|
||||||
|
* - If inconsistent or blank, formats pages.
|
||||||
|
* PUBLIC RETURN TYPE: uint16_t (EE_OK / EE_ERROR / ...)
|
||||||
|
*/
|
||||||
|
uint16_t EE_Init(void)
|
||||||
|
{
|
||||||
|
uint16_t status0 = EE_GetPageStatus(EE_PAGE0_BASE);
|
||||||
|
uint16_t status1 = EE_GetPageStatus(EE_PAGE1_BASE);
|
||||||
|
|
||||||
|
if ((status0 == EE_PAGE_STATUS_ERASED) && (status1 == EE_PAGE_STATUS_ERASED))
|
||||||
|
{
|
||||||
|
/* Fresh device -> format */
|
||||||
|
return (uint16_t)EE_Format();
|
||||||
|
}
|
||||||
|
else if ((status0 == EE_PAGE_STATUS_VALID) && (status1 == EE_PAGE_STATUS_ERASED))
|
||||||
|
{
|
||||||
|
EE_ActivePageBase = EE_PAGE0_BASE;
|
||||||
|
return EE_OK;
|
||||||
|
}
|
||||||
|
else if ((status1 == EE_PAGE_STATUS_VALID) && (status0 == EE_PAGE_STATUS_ERASED))
|
||||||
|
{
|
||||||
|
EE_ActivePageBase = EE_PAGE1_BASE;
|
||||||
|
return EE_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Any weird or inconsistent state -> reformat */
|
||||||
|
return (uint16_t)EE_Format();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read a 16-bit variable by its virtual address.
|
||||||
|
* PUBLIC RETURN: EE_OK / EE_NOT_FOUND / EE_ERROR (as uint16_t)
|
||||||
|
*/
|
||||||
|
uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t *Data)
|
||||||
|
{
|
||||||
|
EE_Status st;
|
||||||
|
|
||||||
|
if (Data == NULL)
|
||||||
|
return EE_ERROR;
|
||||||
|
|
||||||
|
st = EE_FindInPage(EE_ActivePageBase, VirtAddress, Data);
|
||||||
|
return (uint16_t)st;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write (append) a 16-bit variable.
|
||||||
|
* - Writes a new record in the active page.
|
||||||
|
* - If the page is full, triggers a page transfer (GC).
|
||||||
|
* PUBLIC RETURN: EE_OK / EE_ERROR / EE_NO_SPACE (as uint16_t)
|
||||||
|
*/
|
||||||
|
uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data)
|
||||||
|
{
|
||||||
|
uint32_t freeAddr;
|
||||||
|
EE_Status st;
|
||||||
|
|
||||||
|
/* Find free space in active page */
|
||||||
|
freeAddr = EE_FindFreeAddress(EE_ActivePageBase);
|
||||||
|
if (freeAddr != 0U)
|
||||||
|
{
|
||||||
|
/* Write new record */
|
||||||
|
if (EE_FlashProgramHalfWord(freeAddr, VirtAddress) != HAL_OK)
|
||||||
|
return EE_ERROR;
|
||||||
|
if (EE_FlashProgramHalfWord(freeAddr + 2U, Data) != HAL_OK)
|
||||||
|
return EE_ERROR;
|
||||||
|
|
||||||
|
return EE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No space -> page transfer */
|
||||||
|
st = EE_PageTransfer(VirtAddress, Data);
|
||||||
|
return (uint16_t)st;
|
||||||
|
}
|
||||||
@@ -0,0 +1,628 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_SET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_SET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,747 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P1START)stPulsanti&=(~P1START);
|
||||||
|
else if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P2START)stPulsanti&=(~P2START);
|
||||||
|
else if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
//while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,750 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P1START)stPulsanti&=(~P1START);
|
||||||
|
else if(rtP1<=180){
|
||||||
|
stPulsanti|=P1STOP;
|
||||||
|
}
|
||||||
|
rtP1=200;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P2START)stPulsanti&=(~P2START);
|
||||||
|
else if(rtP2<=180)stPulsanti|=P2STOP;
|
||||||
|
rtP2=200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
//while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,749 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P1START)stPulsanti&=(~P1START);
|
||||||
|
else if(rtP1<20){
|
||||||
|
stPulsanti|=P1STOP;
|
||||||
|
}
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P2START)stPulsanti&=(~P2START);
|
||||||
|
else if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
//while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,740 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P1START);
|
||||||
|
if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P2START);
|
||||||
|
if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,746 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P1START)stPulsanti&=(~P1START);
|
||||||
|
else if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P2START)stPulsanti&=(~P2START);
|
||||||
|
else if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,746 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P1START)stPulsanti&=(~P1START);
|
||||||
|
else if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P2START)stPulsanti&=(~P2START);
|
||||||
|
else if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
//while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,724 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstop,
|
||||||
|
}omciclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P1START);
|
||||||
|
if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P2START);
|
||||||
|
if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
break;
|
||||||
|
case omstop:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -19,6 +19,7 @@ extern uint16_t ch5 ;
|
|||||||
extern uint16_t ch6 ;
|
extern uint16_t ch6 ;
|
||||||
extern uint16_t ch7 ;
|
extern uint16_t ch7 ;
|
||||||
extern uint16_t ch8 ;
|
extern uint16_t ch8 ;
|
||||||
|
extern const uint8_t deftab[];
|
||||||
|
|
||||||
bool toHex(char c1,char c2,char c3,char c4,uint16_t* retval){
|
bool toHex(char c1,char c2,char c3,char c4,uint16_t* retval){
|
||||||
if((c1>='0')&&(c1<='9')){
|
if((c1>='0')&&(c1<='9')){
|
||||||
@@ -77,7 +78,7 @@ void manageCDC(void){
|
|||||||
if(rxidx){
|
if(rxidx){
|
||||||
switch(rxbuf[0]){
|
switch(rxbuf[0]){
|
||||||
case 'i':
|
case 'i':
|
||||||
sprintf((char*)s,"\ninfo");
|
sprintf((char*)s,"info\n");
|
||||||
while (CDC_Transmit_FS(s, 5) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, 5) == USBD_BUSY);
|
||||||
sprintf((char*)s,"\npwm %d%d%d%d%d%d%d%d",IsPwmRunning(timMot1,FWMot1),IsPwmRunning(timMot1,BWMot1),IsPwmRunning(timMot2,FWMot2),IsPwmRunning(timMot2,BWMot2),IsPwmRunning(timMot3,FWMot3),IsPwmRunning(timMot3,BWMot3),IsPwmRunning(timMot4,FWMot4),IsPwmRunning(timMot4,BWMot4));
|
sprintf((char*)s,"\npwm %d%d%d%d%d%d%d%d",IsPwmRunning(timMot1,FWMot1),IsPwmRunning(timMot1,BWMot1),IsPwmRunning(timMot2,FWMot2),IsPwmRunning(timMot2,BWMot2),IsPwmRunning(timMot3,FWMot3),IsPwmRunning(timMot3,BWMot3),IsPwmRunning(timMot4,FWMot4),IsPwmRunning(timMot4,BWMot4));
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
@@ -88,7 +89,7 @@ void manageCDC(void){
|
|||||||
break;
|
break;
|
||||||
case 'I':
|
case 'I':
|
||||||
sprintf((char*)s,"\nID000000");
|
sprintf((char*)s,"\nID000000");
|
||||||
while (CDC_Transmit_FS(s, 5) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, 9) == USBD_BUSY);
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
if(rxidx==8){
|
if(rxidx==8){
|
||||||
@@ -168,10 +169,6 @@ void manageCDC(void){
|
|||||||
}else if(rxbuf[1]=='d'){
|
}else if(rxbuf[1]=='d'){
|
||||||
if(rxidx==2){
|
if(rxidx==2){
|
||||||
for(i=0;i<32;i++){
|
for(i=0;i<32;i++){
|
||||||
if((i%4)==0){
|
|
||||||
sprintf((char*)s,"\n");
|
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
|
||||||
}
|
|
||||||
st=EEW_Read(i, &val);
|
st=EEW_Read(i, &val);
|
||||||
if (st == EE_OK){
|
if (st == EE_OK){
|
||||||
sprintf((char*)s,"0x%02x=0x%04x ",i,val);
|
sprintf((char*)s,"0x%02x=0x%04x ",i,val);
|
||||||
@@ -181,12 +178,30 @@ void manageCDC(void){
|
|||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if((i%4)==0){
|
||||||
|
sprintf((char*)s,"\n");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
sprintf((char*)s,"\n?ed");
|
sprintf((char*)s,"\n?ed");
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
|
}else if(rxbuf[1]=='x'){
|
||||||
|
if(rxidx==2){
|
||||||
|
for(i=0;i<32;i++){
|
||||||
|
st=EEW_Write(i,deftab[i]);
|
||||||
|
if (st == EE_OK)sprintf((char*)s,"\ndone 0x%02x=0x%04x",eeadd,val);
|
||||||
|
else sprintf((char*)s,"\nee write error %d", st);
|
||||||
|
sprintf((char*)s,"\n");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
sprintf((char*)s,"\n?er|w|d");
|
sprintf((char*)s,"\n?ex");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?er|w|d|x");
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@@ -0,0 +1,749 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P1START)stPulsanti&=(~P1START);
|
||||||
|
else if(rtP1<=16){
|
||||||
|
stPulsanti|=P1STOP;
|
||||||
|
}
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P2START)stPulsanti&=(~P2START);
|
||||||
|
else if(rtP2<=16)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
//while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -0,0 +1,724 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstop,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P1START);
|
||||||
|
if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P2START);
|
||||||
|
if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
break;
|
||||||
|
case omstop:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
@@ -19,6 +19,7 @@ extern uint16_t ch5 ;
|
|||||||
extern uint16_t ch6 ;
|
extern uint16_t ch6 ;
|
||||||
extern uint16_t ch7 ;
|
extern uint16_t ch7 ;
|
||||||
extern uint16_t ch8 ;
|
extern uint16_t ch8 ;
|
||||||
|
extern const uint8_t deftab[];
|
||||||
|
|
||||||
bool toHex(char c1,char c2,char c3,char c4,uint16_t* retval){
|
bool toHex(char c1,char c2,char c3,char c4,uint16_t* retval){
|
||||||
if((c1>='0')&&(c1<='9')){
|
if((c1>='0')&&(c1<='9')){
|
||||||
@@ -77,7 +78,7 @@ void manageCDC(void){
|
|||||||
if(rxidx){
|
if(rxidx){
|
||||||
switch(rxbuf[0]){
|
switch(rxbuf[0]){
|
||||||
case 'i':
|
case 'i':
|
||||||
sprintf((char*)s,"\ninfo");
|
sprintf((char*)s,"info\n");
|
||||||
while (CDC_Transmit_FS(s, 5) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, 5) == USBD_BUSY);
|
||||||
sprintf((char*)s,"\npwm %d%d%d%d%d%d%d%d",IsPwmRunning(timMot1,FWMot1),IsPwmRunning(timMot1,BWMot1),IsPwmRunning(timMot2,FWMot2),IsPwmRunning(timMot2,BWMot2),IsPwmRunning(timMot3,FWMot3),IsPwmRunning(timMot3,BWMot3),IsPwmRunning(timMot4,FWMot4),IsPwmRunning(timMot4,BWMot4));
|
sprintf((char*)s,"\npwm %d%d%d%d%d%d%d%d",IsPwmRunning(timMot1,FWMot1),IsPwmRunning(timMot1,BWMot1),IsPwmRunning(timMot2,FWMot2),IsPwmRunning(timMot2,BWMot2),IsPwmRunning(timMot3,FWMot3),IsPwmRunning(timMot3,BWMot3),IsPwmRunning(timMot4,FWMot4),IsPwmRunning(timMot4,BWMot4));
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
@@ -168,10 +169,6 @@ void manageCDC(void){
|
|||||||
}else if(rxbuf[1]=='d'){
|
}else if(rxbuf[1]=='d'){
|
||||||
if(rxidx==2){
|
if(rxidx==2){
|
||||||
for(i=0;i<32;i++){
|
for(i=0;i<32;i++){
|
||||||
if((i%4)==0){
|
|
||||||
sprintf((char*)s,"\n");
|
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
|
||||||
}
|
|
||||||
st=EEW_Read(i, &val);
|
st=EEW_Read(i, &val);
|
||||||
if (st == EE_OK){
|
if (st == EE_OK){
|
||||||
sprintf((char*)s,"0x%02x=0x%04x ",i,val);
|
sprintf((char*)s,"0x%02x=0x%04x ",i,val);
|
||||||
@@ -181,12 +178,27 @@ void manageCDC(void){
|
|||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if((i%4)==0){
|
||||||
|
sprintf((char*)s,"\n");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
sprintf((char*)s,"\n?ed");
|
sprintf((char*)s,"\n?ed");
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
|
}else if(rxbuf[1]=='x'){
|
||||||
|
if(rxidx==2){
|
||||||
|
for(i=0;i<32;i++){
|
||||||
|
st=EEW_Write(i,deftab[i]);
|
||||||
|
if (st == EE_OK)sprintf((char*)s,"\ndone 0x%02x=0x%04x",eeadd,val);
|
||||||
|
else sprintf((char*)s,"\nee write error %d", st);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
sprintf((char*)s,"\n?er|w|d");
|
sprintf((char*)s,"\n?ex");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?er|w|d|x");
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@@ -0,0 +1,655 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.c
|
||||||
|
* @brief : Main program body
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "main.h"
|
||||||
|
#include "usb_device.h"
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
#include "cdc_int.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "pwm.h"
|
||||||
|
#include "adc.h"
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PTD */
|
||||||
|
|
||||||
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
|
/* USER CODE END PD */
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PM */
|
||||||
|
|
||||||
|
/* USER CODE END PM */
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
DMA_HandleTypeDef hdma_adc1;
|
||||||
|
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
TIM_HandleTypeDef htim4;
|
||||||
|
|
||||||
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
extern volatile uint16_t adc_dma_buf[];
|
||||||
|
extern uint16_t ch4 ;
|
||||||
|
extern uint16_t ch5 ;
|
||||||
|
extern uint16_t ch6 ;
|
||||||
|
extern uint16_t ch7 ;
|
||||||
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
static void MX_GPIO_Init(void);
|
||||||
|
static void MX_DMA_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
|
static void MX_TIM4_Init(void);
|
||||||
|
static void MX_ADC1_Init(void);
|
||||||
|
static void MX_USART1_UART_Init(void);
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private user code ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
void HAL_SYSTICK_Callback(void){
|
||||||
|
static unsigned char c10ms = 0;
|
||||||
|
static uint8_t c100ms = 0;
|
||||||
|
static uint8_t c1s = 0;
|
||||||
|
static uint8_t inidx=0;
|
||||||
|
static uint8_t inbuf[4];
|
||||||
|
|
||||||
|
if (++c10ms >= 10) { // 10 ms
|
||||||
|
c10ms = 0;
|
||||||
|
//**** legge i tasti********************************************************************************
|
||||||
|
inidx++;
|
||||||
|
inidx&=0x03;
|
||||||
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
|
//**** legge adc ***********************************************************************************
|
||||||
|
readAdc();
|
||||||
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
|
||||||
|
if (++c1s >= 10) { // 10 ms
|
||||||
|
c1s = 0;
|
||||||
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P1START);
|
||||||
|
if(rtP1<20)stPulsanti|=P1STOP;
|
||||||
|
rtP1=20;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
stPulsanti&=(~P2START);
|
||||||
|
if(rtP2<20)stPulsanti|=P2STOP;
|
||||||
|
rtP2=20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The application entry point.
|
||||||
|
* @retval int
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/* MCU Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||||
|
HAL_Init();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
|
/* USER CODE END Init */
|
||||||
|
|
||||||
|
/* Configure the system clock */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
/* USER CODE BEGIN SysInit */
|
||||||
|
|
||||||
|
/* USER CODE END SysInit */
|
||||||
|
|
||||||
|
/* Initialize all configured peripherals */
|
||||||
|
MX_GPIO_Init();
|
||||||
|
MX_DMA_Init();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
MX_TIM4_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
|
MX_USART1_UART_Init();
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_buf, ADC_NUM_CHANNELS);
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
|
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
|
if (EE_Init() != EE_OK){
|
||||||
|
for(;;);//errore eeprom
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
|
/* Infinite loop */
|
||||||
|
/* USER CODE BEGIN WHILE */
|
||||||
|
while (1){
|
||||||
|
manageCDC();
|
||||||
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
// while (CDC_Available()) {
|
||||||
|
// int c = CDC_ReadByte();
|
||||||
|
//if (c < 0) break;
|
||||||
|
|
||||||
|
// uint8_t out = (uint8_t)c;
|
||||||
|
// if (out >= 'a' && out <= 'z') out -= 32; // to upper
|
||||||
|
|
||||||
|
// unsigned char s[100];
|
||||||
|
// sprintf((char*)s,"\nc=%03d",c);
|
||||||
|
// while (CDC_Transmit_FS(s, 6) == USBD_BUSY) {
|
||||||
|
// // tiny spin or yield
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//HAL_Delay(1000);
|
||||||
|
// CDC_Transmit_FS((uint8_t*)"Ping\r\n", 6);
|
||||||
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
}
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
|
* in the RCC_OscInitTypeDef structure.
|
||||||
|
*/
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initializes the CPU, AHB and APB buses clocks
|
||||||
|
*/
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC1 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_ADC1_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 0 */
|
||||||
|
|
||||||
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN ADC1_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 1 */
|
||||||
|
|
||||||
|
/** Common config
|
||||||
|
*/
|
||||||
|
hadc1.Instance = ADC1;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.NbrOfConversion = 5;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_3;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_4;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_5;
|
||||||
|
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN ADC1_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 0;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 17999;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 1000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 2000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 3000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 4000;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM4 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM4_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM4_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 1 */
|
||||||
|
htim4.Instance = TIM4;
|
||||||
|
htim4.Init.Prescaler = 0;
|
||||||
|
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim4.Init.Period = 17999;
|
||||||
|
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||||
|
sConfigOC.Pulse = 5000;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 6000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 7000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.Pulse = 8000;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM4_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM4_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 = 115200;
|
||||||
|
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;
|
||||||
|
if (HAL_UART_Init(&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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief GPIO Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_GPIO_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_1 */
|
||||||
|
|
||||||
|
/* GPIO Ports Clock Enable */
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : LED2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = LED2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : P1_Pin P2_Pin */
|
||||||
|
GPIO_InitStruct.Pin = P1_Pin|P2_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : AIN1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = AIN1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
|
HAL_GPIO_Init(AIN1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : INH1_Pin INH2_Pin INH3_Pin INH4_Pin
|
||||||
|
EXP1_Pin EXP2_Pin EXP3_Pin */
|
||||||
|
GPIO_InitStruct.Pin = INH1_Pin|INH2_Pin|INH3_Pin|INH4_Pin
|
||||||
|
|EXP1_Pin|EXP2_Pin|EXP3_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : CH1_Pin CH2_Pin CH3_Pin CH4_Pin */
|
||||||
|
GPIO_InitStruct.Pin = CH1_Pin|CH2_Pin|CH3_Pin|CH4_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : BUZ_Pin LED1_Pin */
|
||||||
|
GPIO_InitStruct.Pin = BUZ_Pin|LED1_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||||
|
|
||||||
|
/* USER CODE END MX_GPIO_Init_2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function is executed in case of error occurrence.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* USER CODE END Error_Handler_Debug */
|
||||||
|
}
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief Reports the name of the source file and the source line number
|
||||||
|
* where the assert_param error has occurred.
|
||||||
|
* @param file: pointer to the source file name
|
||||||
|
* @param line: assert_param error line source number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
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, line) */
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -3,6 +3,9 @@ org.eclipse.debug.ui.MemoryView.orientation=0
|
|||||||
org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<launchPerspectives/>\r\n
|
org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<launchPerspectives/>\r\n
|
||||||
org.eclipse.debug.ui.switch_perspective_on_suspend=always
|
org.eclipse.debug.ui.switch_perspective_on_suspend=always
|
||||||
org.eclipse.debug.ui.user_view_bindings=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<viewBindings>\r\n <view id\="org.eclipse.debug.ui.ExpressionView">\r\n <perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="opened"/>\r\n </view>\r\n</viewBindings>\r\n
|
org.eclipse.debug.ui.user_view_bindings=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<viewBindings>\r\n <view id\="org.eclipse.debug.ui.ExpressionView">\r\n <perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="opened"/>\r\n </view>\r\n</viewBindings>\r\n
|
||||||
|
pref_state_memento.org.eclipse.debug.ui.BreakpointView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="315" org.eclipse.debug.ui.SASH_VIEW_PART\="684">\r\n<PRESENTATION_CONTEXT_PROPERTIES IMemento.internal.id\="org.eclipse.debug.ui.BreakpointView">\r\n<BOOLEAN BOOLEAN\="true" IMemento.internal.id\="org.eclipse.debug.ui.check"/>\r\n</PRESENTATION_CONTEXT_PROPERTIES>\r\n</VariablesViewMemento>
|
||||||
pref_state_memento.org.eclipse.debug.ui.DebugVieworg.eclipse.debug.ui.DebugView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<DebugViewMemento org.eclipse.debug.ui.BREADCRUMB_DROPDOWN_AUTO_EXPAND\="false"/>
|
pref_state_memento.org.eclipse.debug.ui.DebugVieworg.eclipse.debug.ui.DebugView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<DebugViewMemento org.eclipse.debug.ui.BREADCRUMB_DROPDOWN_AUTO_EXPAND\="false"/>
|
||||||
preferredDetailPanes=DefaultDetailPane\:DefaultDetailPane|
|
pref_state_memento.org.eclipse.debug.ui.ExpressionView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="315" org.eclipse.debug.ui.SASH_VIEW_PART\="684">\r\n<PRESENTATION_CONTEXT_PROPERTIES IMemento.internal.id\="org.eclipse.debug.ui.ExpressionView">\r\n<INTEGER IMemento.internal.id\="initialChildCountLimitForCollections" INTEGER\="100"/>\r\n<BOOLEAN BOOLEAN\="true" IMemento.internal.id\="PRESENTATION_SHOW_LOGICAL_STRUCTURES"/>\r\n</PRESENTATION_CONTEXT_PROPERTIES>\r\n</VariablesViewMemento>
|
||||||
|
pref_state_memento.org.eclipse.debug.ui.VariableView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="315" org.eclipse.debug.ui.SASH_VIEW_PART\="684">\r\n<PRESENTATION_CONTEXT_PROPERTIES IMemento.internal.id\="org.eclipse.debug.ui.VariableView">\r\n<INTEGER IMemento.internal.id\="initialChildCountLimitForCollections" INTEGER\="100"/>\r\n<BOOLEAN BOOLEAN\="true" IMemento.internal.id\="PRESENTATION_SHOW_LOGICAL_STRUCTURES"/>\r\n</PRESENTATION_CONTEXT_PROPERTIES>\r\n</VariablesViewMemento>
|
||||||
|
preferredDetailPanes=NumberFormatPane\:NumberFormatPane|DefaultDetailPane\:DefaultDetailPane|
|
||||||
preferredTargets=org.eclipse.cdt.debug.ui.toggleCBreakpointTarget,org.eclipse.cdt.debug.ui.toggleCDynamicPrintfTarget\:org.eclipse.cdt.debug.ui.toggleCBreakpointTarget|
|
preferredTargets=org.eclipse.cdt.debug.ui.toggleCBreakpointTarget,org.eclipse.cdt.debug.ui.toggleCDynamicPrintfTarget\:org.eclipse.cdt.debug.ui.toggleCBreakpointTarget|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -38,7 +38,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="HAL_ADC_PollForConversion"/>
|
<item key="textPattern" value="SetMot"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="P2_Pin"/>
|
<item key="textPattern" value="rtp1"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="p2"/>
|
<item key="textPattern" value="stpulsanti"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="EE_VirtAddrse"/>
|
<item key="textPattern" value="buz"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="ee_init"/>
|
<item key="textPattern" value="led2"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="tohex"/>
|
<item key="textPattern" value="led"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="EE_ReadVariable"/>
|
<item key="textPattern" value="blink"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="inh2"/>
|
<item key="textPattern" value="pa15"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -137,7 +137,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="INH1_GPIO_Port"/>
|
<item key="textPattern" value="pc13"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="INH1"/>
|
<item key="textPattern" value="led1"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="INH1_Pin"/>
|
<item key="textPattern" value="led3"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
@@ -173,7 +173,7 @@
|
|||||||
<item key="ignoreCase" value="true"/>
|
<item key="ignoreCase" value="true"/>
|
||||||
<item key="isRegExSearch" value="false"/>
|
<item key="isRegExSearch" value="false"/>
|
||||||
<item key="isWholeWord" value="false"/>
|
<item key="isWholeWord" value="false"/>
|
||||||
<item key="textPattern" value="Led2"/>
|
<item key="textPattern" value="managecdc"/>
|
||||||
<item key="scope" value="0"/>
|
<item key="scope" value="0"/>
|
||||||
<list key="fileNamePatterns">
|
<list key="fileNamePatterns">
|
||||||
<item value="*"/>
|
<item value="*"/>
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
<item key="hasShownOverlayPopupBefore" value="true"/>
|
<item key="hasShownOverlayPopupBefore" value="true"/>
|
||||||
<item key="replaceBarOpen" value="false"/>
|
<item key="replaceBarOpen" value="false"/>
|
||||||
<list key="searchhistory">
|
<list key="searchhistory">
|
||||||
|
<item value="deftab"/>
|
||||||
|
<item value="rtp1"/>
|
||||||
|
<item value="cdc"/>
|
||||||
<item value="eefindinpage"/>
|
<item value="eefindinpage"/>
|
||||||
<item value="eefindstring"/>
|
<item value="eefindstring"/>
|
||||||
<item value="eeadd"/>
|
<item value="eeadd"/>
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#Wed Dec 24 18:17:19 CET 2025
|
#Sun Apr 12 22:09:27 CEST 2026
|
||||||
org.eclipse.core.runtime=2
|
org.eclipse.core.runtime=2
|
||||||
org.eclipse.platform=4.33.0.v20240903-0240
|
org.eclipse.platform=4.33.0.v20240903-0240
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ ProjectManager.FreePins=false
|
|||||||
ProjectManager.HalAssertFull=false
|
ProjectManager.HalAssertFull=false
|
||||||
ProjectManager.HeapSize=0x200
|
ProjectManager.HeapSize=0x200
|
||||||
ProjectManager.KeepUserCode=true
|
ProjectManager.KeepUserCode=true
|
||||||
ProjectManager.LastFirmware=true
|
ProjectManager.LastFirmware=false
|
||||||
ProjectManager.LibraryCopy=1
|
ProjectManager.LibraryCopy=1
|
||||||
ProjectManager.MainLocation=Core/Src
|
ProjectManager.MainLocation=Core/Src
|
||||||
ProjectManager.NoMain=false
|
ProjectManager.NoMain=false
|
||||||
@@ -299,17 +299,18 @@ RCC.APB2TimFreq_Value=72000000
|
|||||||
RCC.FCLKCortexFreq_Value=72000000
|
RCC.FCLKCortexFreq_Value=72000000
|
||||||
RCC.FamilyName=M
|
RCC.FamilyName=M
|
||||||
RCC.HCLKFreq_Value=72000000
|
RCC.HCLKFreq_Value=72000000
|
||||||
RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler,VCOOutput2Freq_Value
|
RCC.HSE_VALUE=12000000
|
||||||
|
RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler,VCOOutput2Freq_Value
|
||||||
RCC.MCOFreq_Value=72000000
|
RCC.MCOFreq_Value=72000000
|
||||||
RCC.PLLCLKFreq_Value=72000000
|
RCC.PLLCLKFreq_Value=72000000
|
||||||
RCC.PLLMCOFreq_Value=36000000
|
RCC.PLLMCOFreq_Value=36000000
|
||||||
RCC.PLLMUL=RCC_PLL_MUL9
|
RCC.PLLMUL=RCC_PLL_MUL6
|
||||||
RCC.SYSCLKFreq_VALUE=72000000
|
RCC.SYSCLKFreq_VALUE=72000000
|
||||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||||
RCC.TimSysFreq_Value=72000000
|
RCC.TimSysFreq_Value=72000000
|
||||||
RCC.USBFreq_Value=48000000
|
RCC.USBFreq_Value=48000000
|
||||||
RCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5
|
RCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5
|
||||||
RCC.VCOOutput2Freq_Value=8000000
|
RCC.VCOOutput2Freq_Value=12000000
|
||||||
SH.ADCx_IN4.0=ADC1_IN4,IN4
|
SH.ADCx_IN4.0=ADC1_IN4,IN4
|
||||||
SH.ADCx_IN4.1=ADC2_IN4
|
SH.ADCx_IN4.1=ADC2_IN4
|
||||||
SH.ADCx_IN4.ConfNb=2
|
SH.ADCx_IN4.ConfNb=2
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ void StopMot(TIM_HandleTypeDef *htim,uint32_t Channel);
|
|||||||
void StartMot(TIM_HandleTypeDef *htim,uint32_t Channel,uint16_t pwmval);
|
void StartMot(TIM_HandleTypeDef *htim,uint32_t Channel,uint16_t pwmval);
|
||||||
void SetMotPwm(TIM_HandleTypeDef *htim,uint32_t Channel,uint16_t pwmval);
|
void SetMotPwm(TIM_HandleTypeDef *htim,uint32_t Channel,uint16_t pwmval);
|
||||||
void SetMot(uint8_t mot,uint8_t dir,uint16_t pwmval);
|
void SetMot(uint8_t mot,uint8_t dir,uint16_t pwmval);
|
||||||
|
void SetMotPerc(uint8_t mot,uint8_t dir,uint8_t perc);
|
||||||
|
|
||||||
#define timMot1 &htim2
|
#define timMot1 &htim2
|
||||||
#define FWMot1 TIM_CHANNEL_1
|
#define FWMot1 TIM_CHANNEL_1
|
||||||
|
|||||||
@@ -84,7 +84,7 @@
|
|||||||
* (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 12000000U /*!< Value of the External oscillator in Hz */
|
||||||
#endif /* HSE_VALUE */
|
#endif /* HSE_VALUE */
|
||||||
|
|
||||||
#if !defined (HSE_STARTUP_TIMEOUT)
|
#if !defined (HSE_STARTUP_TIMEOUT)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ extern uint16_t ch5 ;
|
|||||||
extern uint16_t ch6 ;
|
extern uint16_t ch6 ;
|
||||||
extern uint16_t ch7 ;
|
extern uint16_t ch7 ;
|
||||||
extern uint16_t ch8 ;
|
extern uint16_t ch8 ;
|
||||||
|
extern const uint8_t deftab[];
|
||||||
|
|
||||||
bool toHex(char c1,char c2,char c3,char c4,uint16_t* retval){
|
bool toHex(char c1,char c2,char c3,char c4,uint16_t* retval){
|
||||||
if((c1>='0')&&(c1<='9')){
|
if((c1>='0')&&(c1<='9')){
|
||||||
@@ -185,8 +186,21 @@ void manageCDC(void){
|
|||||||
sprintf((char*)s,"\n?ed");
|
sprintf((char*)s,"\n?ed");
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
|
}else if(rxbuf[1]=='x'){
|
||||||
|
if(rxidx==2){
|
||||||
|
for(i=0;i<32;i++){
|
||||||
|
st=EEW_Write(i,deftab[i]);
|
||||||
|
if (st == EE_OK)sprintf((char*)s,"\ndone 0x%02x=0x%04x",i,deftab[i]);
|
||||||
|
else sprintf((char*)s,"\nee write error %d", st);
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
sprintf((char*)s,"\n?er|w|d");
|
sprintf((char*)s,"\n?ex");
|
||||||
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sprintf((char*)s,"\n?er|w|d|x");
|
||||||
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
while (CDC_Transmit_FS(s, strlen((char*)s)) == USBD_BUSY);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -10,6 +10,41 @@
|
|||||||
* [2..] Records...
|
* [2..] Records...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const uint8_t deftab[32]={
|
||||||
|
40, //m1pwmap
|
||||||
|
60, //m1pwmch
|
||||||
|
50, //m2pwmap
|
||||||
|
50, //m2pwmch
|
||||||
|
40, //m3pwmap
|
||||||
|
40, //m3pwmch
|
||||||
|
40, //m4pwmap
|
||||||
|
40, //m4pwmch
|
||||||
|
20, //m1rampstart
|
||||||
|
20, //m2rampstart
|
||||||
|
20, //m3rampstart
|
||||||
|
20, //m4rampstart
|
||||||
|
26, //t1ap
|
||||||
|
2, //t2ap
|
||||||
|
8, //t3ap
|
||||||
|
40, //t4ap
|
||||||
|
1, //twap
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint16_t VirtAddress;
|
uint16_t VirtAddress;
|
||||||
|
|||||||
@@ -31,11 +31,36 @@
|
|||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PTD */
|
/* USER CODE BEGIN PTD */
|
||||||
|
typedef enum{
|
||||||
|
omchiuso,
|
||||||
|
omapertura1,
|
||||||
|
omapertura2,
|
||||||
|
omapertura3,
|
||||||
|
omapertura4,
|
||||||
|
omapertura5,
|
||||||
|
omapertura6,
|
||||||
|
omstopapertura,
|
||||||
|
omaperto,
|
||||||
|
omchiusura1,
|
||||||
|
omchiusura2,
|
||||||
|
omchiusura3,
|
||||||
|
omchiusura4,
|
||||||
|
omchiusura5,
|
||||||
|
omchiusura6,
|
||||||
|
omstopchiusura,
|
||||||
|
}omCiclo_st;
|
||||||
|
typedef enum{
|
||||||
|
bzoff,
|
||||||
|
bzmoving,
|
||||||
|
}stBuz_st;
|
||||||
/* USER CODE END PTD */
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
/* Private define ------------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PD */
|
/* USER CODE BEGIN PD */
|
||||||
|
#define P1START 0x01
|
||||||
|
#define P1STOP 0x02
|
||||||
|
#define P2START 0x04
|
||||||
|
#define P2STOP 0x08
|
||||||
|
|
||||||
/* USER CODE END PD */
|
/* USER CODE END PD */
|
||||||
|
|
||||||
@@ -63,6 +88,12 @@ extern uint16_t ch7 ;
|
|||||||
extern uint16_t ch8 ;
|
extern uint16_t ch8 ;
|
||||||
|
|
||||||
uint8_t pulsanti=0;
|
uint8_t pulsanti=0;
|
||||||
|
volatile uint8_t rtP1=0;
|
||||||
|
volatile uint8_t rtP2=0;
|
||||||
|
|
||||||
|
uint8_t stPulsanti=0;
|
||||||
|
omCiclo_st stCiclo=omchiuso;
|
||||||
|
volatile stBuz_st stBuz=bzoff;
|
||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
@@ -88,26 +119,115 @@ void HAL_SYSTICK_Callback(void){
|
|||||||
|
|
||||||
if (++c10ms >= 10) { // 10 ms
|
if (++c10ms >= 10) { // 10 ms
|
||||||
c10ms = 0;
|
c10ms = 0;
|
||||||
|
if(rtP1)rtP1--;
|
||||||
|
if(rtP2)rtP2--;
|
||||||
|
|
||||||
//**** legge i tasti********************************************************************************
|
//**** legge i tasti********************************************************************************
|
||||||
inidx++;
|
inidx++;
|
||||||
inidx&=0x03;
|
inidx&=0x03;
|
||||||
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_SET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
if(HAL_GPIO_ReadPin(P1_GPIO_Port, P1_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP1;else inbuf[inidx]&=(~INP1);
|
||||||
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_SET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
if(HAL_GPIO_ReadPin(P2_GPIO_Port, P2_Pin)==GPIO_PIN_RESET)inbuf[inidx]|=INP2;else inbuf[inidx]&=(~INP2);
|
||||||
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
pulsanti|=(inbuf[0]&inbuf[1]&inbuf[2]&inbuf[3]);
|
||||||
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
pulsanti&=(inbuf[0]|inbuf[1]|inbuf[2]|inbuf[3]);
|
||||||
//**** legge adc ***********************************************************************************
|
//**** legge adc ***********************************************************************************
|
||||||
readAdc();
|
readAdc();
|
||||||
if (++c100ms >= 10) { // 10 ms
|
if (++c100ms >= 10) { // 10 ms
|
||||||
|
|
||||||
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
c100ms = 0; //flag_10ms = 1; // set a flag; do real work in main loop
|
||||||
|
//**** gestione buzzer *****************************************************************************
|
||||||
|
if(stBuz==bzmoving){
|
||||||
|
if(c1s>=5)HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);else HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_SET);
|
||||||
|
}else{//bzoff
|
||||||
|
HAL_GPIO_WritePin(GPIOA, BUZ_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
//**************************************************************************************************
|
||||||
if (++c1s >= 10) { // 10 ms
|
if (++c1s >= 10) { // 10 ms
|
||||||
c1s = 0;
|
c1s = 0;
|
||||||
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
|
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void managePulsanti(void){
|
||||||
|
if(pulsanti&INP1){
|
||||||
|
if(rtP1==0)stPulsanti|=P1START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P1START)stPulsanti&=(~P1START);
|
||||||
|
else if(rtP1<=190){
|
||||||
|
stPulsanti|=P1STOP;
|
||||||
|
}
|
||||||
|
rtP1=200;
|
||||||
|
}
|
||||||
|
if(pulsanti&INP2){
|
||||||
|
if(rtP2==0)stPulsanti|=P2START;
|
||||||
|
}else{
|
||||||
|
if(stPulsanti&P2START)stPulsanti&=(~P2START);
|
||||||
|
else if(rtP2<=190)stPulsanti|=P2STOP;
|
||||||
|
rtP2=200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void manageCiclo(void){
|
||||||
|
switch(stCiclo){
|
||||||
|
case omchiuso:
|
||||||
|
if(stPulsanti&P1START){
|
||||||
|
stBuz=bzmoving;
|
||||||
|
stCiclo=omapertura1;
|
||||||
|
}
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omapertura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopapertura;
|
||||||
|
break;
|
||||||
|
case omstopapertura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omchiuso;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
case omaperto:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura1:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura2:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura3:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura4:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura5:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omchiusura6:
|
||||||
|
if(stPulsanti&P1STOP)stCiclo=omstopchiusura;
|
||||||
|
break;
|
||||||
|
case omstopchiusura:
|
||||||
|
stBuz=bzoff;
|
||||||
|
stCiclo=omaperto;
|
||||||
|
stPulsanti&=(~P1STOP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -156,7 +276,7 @@ int main(void)
|
|||||||
StopMot(timMot4,FWMot4);
|
StopMot(timMot4,FWMot4);
|
||||||
StopMot(timMot4,BWMot4);
|
StopMot(timMot4,BWMot4);
|
||||||
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
//CDC_Transmit_FS((uint8_t*)"Start\r\n", 7);
|
||||||
while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
//while (CDC_Transmit_FS((uint8_t*)"Start\r\n", 7) == USBD_BUSY);
|
||||||
if (EE_Init() != EE_OK){
|
if (EE_Init() != EE_OK){
|
||||||
for(;;);//errore eeprom
|
for(;;);//errore eeprom
|
||||||
}
|
}
|
||||||
@@ -167,6 +287,8 @@ int main(void)
|
|||||||
while (1){
|
while (1){
|
||||||
manageCDC();
|
manageCDC();
|
||||||
manageAdc();
|
manageAdc();
|
||||||
|
managePulsanti();
|
||||||
|
manageCiclo();
|
||||||
// while (CDC_Available()) {
|
// while (CDC_Available()) {
|
||||||
// int c = CDC_ReadByte();
|
// int c = CDC_ReadByte();
|
||||||
//if (c < 0) break;
|
//if (c < 0) break;
|
||||||
@@ -209,7 +331,7 @@ void SystemClock_Config(void)
|
|||||||
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
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_HSE;
|
||||||
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
|
||||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
|
|||||||
@@ -135,3 +135,110 @@ void SetMot(uint8_t mot,uint8_t dir,uint16_t pwmval){
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetMotPerc(uint8_t mot,uint8_t dir,uint8_t perc){
|
||||||
|
uint16_t pwmval;
|
||||||
|
uint32_t tempval;
|
||||||
|
tempval=perc;
|
||||||
|
tempval*=16384;
|
||||||
|
tempval/=100;
|
||||||
|
pwmval=(uint16_t)tempval;
|
||||||
|
switch(mot){
|
||||||
|
case 1:
|
||||||
|
if(dir==FW){
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot1,FWMot1);
|
||||||
|
HAL_GPIO_WritePin(INH1_GPIO_Port, INH1_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot1, FWMot1)){
|
||||||
|
SetMotPwm(timMot1,FWMot1,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH1_GPIO_Port, INH1_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot1,FWMot1,pwmval);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot1,BWMot1);
|
||||||
|
HAL_GPIO_WritePin(INH1_GPIO_Port, INH1_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot1, BWMot1)){
|
||||||
|
SetMotPwm(timMot1,BWMot1,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH1_GPIO_Port, INH1_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot1,BWMot1,pwmval);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if(dir==FW){
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot2,FWMot2);
|
||||||
|
HAL_GPIO_WritePin(INH2_GPIO_Port, INH2_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot2, FWMot2)){
|
||||||
|
SetMotPwm(timMot2,FWMot2,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH2_GPIO_Port, INH2_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot2,FWMot2,pwmval);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot2,BWMot2);
|
||||||
|
HAL_GPIO_WritePin(INH2_GPIO_Port, INH2_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot2, BWMot2)){
|
||||||
|
SetMotPwm(timMot2,BWMot2,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH2_GPIO_Port, INH2_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot2,BWMot2,pwmval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if(dir==FW){
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot3,FWMot3);
|
||||||
|
HAL_GPIO_WritePin(INH3_GPIO_Port, INH3_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot3, FWMot3)){
|
||||||
|
SetMotPwm(timMot3,FWMot3,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH3_GPIO_Port, INH3_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot3,FWMot3,pwmval);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot3,BWMot3);
|
||||||
|
HAL_GPIO_WritePin(INH3_GPIO_Port, INH3_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot3, BWMot3)){
|
||||||
|
SetMotPwm(timMot3,BWMot3,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH3_GPIO_Port, INH3_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot3,BWMot3,pwmval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if(dir==FW){
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot4,FWMot4);
|
||||||
|
HAL_GPIO_WritePin(INH4_GPIO_Port, INH4_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot4, FWMot4)){
|
||||||
|
SetMotPwm(timMot4,FWMot4,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH4_GPIO_Port, INH4_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot4,FWMot4,pwmval);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(pwmval==0){
|
||||||
|
StopMot(timMot4,BWMot4);
|
||||||
|
HAL_GPIO_WritePin(INH4_GPIO_Port, INH4_Pin, GPIO_PIN_RESET);
|
||||||
|
}else if(IsPwmRunning(timMot4, BWMot4)){
|
||||||
|
SetMotPwm(timMot4,BWMot4,pwmval);
|
||||||
|
}else{
|
||||||
|
HAL_GPIO_WritePin(INH4_GPIO_Port, INH4_Pin, GPIO_PIN_SET);
|
||||||
|
StartMot(timMot4,BWMot4,pwmval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
../Core/Src/eeprom.h:77:24:EEW_Read 1
|
../Core/Src/eeprom.h:77:24:EEW_Read 1
|
||||||
../Core/Src/eeprom.h:82:24:EEW_Write 1
|
../Core/Src/eeprom.h:82:24:EEW_Write 1
|
||||||
../Core/Src/cdc_int.c:23:6:toHex 17
|
../Core/Src/cdc_int.c:24:6:toHex 17
|
||||||
../Core/Src/cdc_int.c:59:6:manageCDC 64
|
../Core/Src/cdc_int.c:60:6:manageCDC 70
|
||||||
|
|||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
../Core/Src/eeprom.h:77:24:EEW_Read 16 static
|
../Core/Src/eeprom.h:77:24:EEW_Read 16 static
|
||||||
../Core/Src/eeprom.h:82:24:EEW_Write 16 static
|
../Core/Src/eeprom.h:82:24:EEW_Write 16 static
|
||||||
../Core/Src/cdc_int.c:23:6:toHex 16 static
|
../Core/Src/cdc_int.c:24:6:toHex 16 static
|
||||||
../Core/Src/cdc_int.c:59:6:manageCDC 184 static
|
../Core/Src/cdc_int.c:60:6:manageCDC 184 static
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
../Core/Src/eeprom.c:38:17:EE_GetPageStatus 1
|
../Core/Src/eeprom.c:73:17:EE_GetPageStatus 1
|
||||||
../Core/Src/eeprom.c:43:26:EE_FlashProgramHalfWord 1
|
../Core/Src/eeprom.c:78:26:EE_FlashProgramHalfWord 1
|
||||||
../Core/Src/eeprom.c:54:26:EE_FlashErasePage 1
|
../Core/Src/eeprom.c:89:26:EE_FlashErasePage 1
|
||||||
../Core/Src/eeprom.c:73:17:EE_FindFreeAddress 3
|
../Core/Src/eeprom.c:108:17:EE_FindFreeAddress 3
|
||||||
../Core/Src/eeprom.c:95:18:EE_FindInPage 6
|
../Core/Src/eeprom.c:130:18:EE_FindInPage 6
|
||||||
../Core/Src/eeprom.c:135:18:EE_Format 4
|
../Core/Src/eeprom.c:170:18:EE_Format 4
|
||||||
../Core/Src/eeprom.c:153:17:EE_GetOtherPageBase 2
|
../Core/Src/eeprom.c:188:17:EE_GetOtherPageBase 2
|
||||||
../Core/Src/eeprom.c:159:18:EE_PageTransfer 11
|
../Core/Src/eeprom.c:194:18:EE_PageTransfer 11
|
||||||
../Core/Src/eeprom.c:232:10:EE_Init 7
|
../Core/Src/eeprom.c:267:10:EE_Init 7
|
||||||
../Core/Src/eeprom.c:263:10:EE_ReadVariable 2
|
../Core/Src/eeprom.c:298:10:EE_ReadVariable 2
|
||||||
../Core/Src/eeprom.c:280:10:EE_WriteVariable 4
|
../Core/Src/eeprom.c:315:10:EE_WriteVariable 4
|
||||||
|
|||||||
Binary file not shown.
@@ -1,11 +1,11 @@
|
|||||||
../Core/Src/eeprom.c:38:17:EE_GetPageStatus 16 static
|
../Core/Src/eeprom.c:73:17:EE_GetPageStatus 16 static
|
||||||
../Core/Src/eeprom.c:43:26:EE_FlashProgramHalfWord 32 static
|
../Core/Src/eeprom.c:78:26:EE_FlashProgramHalfWord 32 static
|
||||||
../Core/Src/eeprom.c:54:26:EE_FlashErasePage 40 static
|
../Core/Src/eeprom.c:89:26:EE_FlashErasePage 40 static
|
||||||
../Core/Src/eeprom.c:73:17:EE_FindFreeAddress 32 static
|
../Core/Src/eeprom.c:108:17:EE_FindFreeAddress 32 static
|
||||||
../Core/Src/eeprom.c:95:18:EE_FindInPage 40 static
|
../Core/Src/eeprom.c:130:18:EE_FindInPage 40 static
|
||||||
../Core/Src/eeprom.c:135:18:EE_Format 8 static
|
../Core/Src/eeprom.c:170:18:EE_Format 8 static
|
||||||
../Core/Src/eeprom.c:153:17:EE_GetOtherPageBase 16 static
|
../Core/Src/eeprom.c:188:17:EE_GetOtherPageBase 16 static
|
||||||
../Core/Src/eeprom.c:159:18:EE_PageTransfer 40 static
|
../Core/Src/eeprom.c:194:18:EE_PageTransfer 40 static
|
||||||
../Core/Src/eeprom.c:232:10:EE_Init 16 static
|
../Core/Src/eeprom.c:267:10:EE_Init 16 static
|
||||||
../Core/Src/eeprom.c:263:10:EE_ReadVariable 24 static
|
../Core/Src/eeprom.c:298:10:EE_ReadVariable 24 static
|
||||||
../Core/Src/eeprom.c:280:10:EE_WriteVariable 24 static
|
../Core/Src/eeprom.c:315:10:EE_WriteVariable 24 static
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
../Core/Src/main.c:82:6:HAL_SYSTICK_Callback 6
|
../Core/Src/main.c:113:6:HAL_SYSTICK_Callback 10
|
||||||
../Core/Src/main.c:117:5:main 3
|
../Core/Src/main.c:151:6:managePulsanti 9
|
||||||
../Core/Src/main.c:197:6:SystemClock_Config 4
|
../Core/Src/main.c:170:6:manageCiclo 32
|
||||||
../Core/Src/main.c:245:13:MX_ADC1_Init 7
|
../Core/Src/main.c:237:5:main 2
|
||||||
../Core/Src/main.c:328:13:MX_TIM2_Init 9
|
../Core/Src/main.c:319:6:SystemClock_Config 4
|
||||||
../Core/Src/main.c:404:13:MX_TIM4_Init 9
|
../Core/Src/main.c:367:13:MX_ADC1_Init 7
|
||||||
../Core/Src/main.c:478:13:MX_USART1_UART_Init 2
|
../Core/Src/main.c:450:13:MX_TIM2_Init 9
|
||||||
../Core/Src/main.c:509:13:MX_DMA_Init 1
|
../Core/Src/main.c:526:13:MX_TIM4_Init 9
|
||||||
../Core/Src/main.c:527:13:MX_GPIO_Init 1
|
../Core/Src/main.c:600:13:MX_USART1_UART_Init 2
|
||||||
../Core/Src/main.c:603:6:Error_Handler 1
|
../Core/Src/main.c:631:13:MX_DMA_Init 1
|
||||||
|
../Core/Src/main.c:649:13:MX_GPIO_Init 1
|
||||||
|
../Core/Src/main.c:725:6:Error_Handler 1
|
||||||
|
|||||||
Binary file not shown.
@@ -1,10 +1,12 @@
|
|||||||
../Core/Src/main.c:82:6:HAL_SYSTICK_Callback 8 static
|
../Core/Src/main.c:113:6:HAL_SYSTICK_Callback 8 static
|
||||||
../Core/Src/main.c:117:5:main 8 static
|
../Core/Src/main.c:151:6:managePulsanti 4 static
|
||||||
../Core/Src/main.c:197:6:SystemClock_Config 88 static
|
../Core/Src/main.c:170:6:manageCiclo 4 static
|
||||||
../Core/Src/main.c:245:13:MX_ADC1_Init 24 static
|
../Core/Src/main.c:237:5:main 8 static
|
||||||
../Core/Src/main.c:328:13:MX_TIM2_Init 64 static
|
../Core/Src/main.c:319:6:SystemClock_Config 88 static
|
||||||
../Core/Src/main.c:404:13:MX_TIM4_Init 64 static
|
../Core/Src/main.c:367:13:MX_ADC1_Init 24 static
|
||||||
../Core/Src/main.c:478:13:MX_USART1_UART_Init 8 static
|
../Core/Src/main.c:450:13:MX_TIM2_Init 64 static
|
||||||
../Core/Src/main.c:509:13:MX_DMA_Init 16 static
|
../Core/Src/main.c:526:13:MX_TIM4_Init 64 static
|
||||||
../Core/Src/main.c:527:13:MX_GPIO_Init 40 static
|
../Core/Src/main.c:600:13:MX_USART1_UART_Init 8 static
|
||||||
../Core/Src/main.c:603:6:Error_Handler 4 static,ignoring_inline_asm
|
../Core/Src/main.c:631:13:MX_DMA_Init 16 static
|
||||||
|
../Core/Src/main.c:649:13:MX_GPIO_Init 40 static
|
||||||
|
../Core/Src/main.c:725:6:Error_Handler 4 static,ignoring_inline_asm
|
||||||
|
|||||||
@@ -3,3 +3,4 @@
|
|||||||
../Core/Src/pwm.c:29:6:StartMot 4
|
../Core/Src/pwm.c:29:6:StartMot 4
|
||||||
../Core/Src/pwm.c:34:6:SetMotPwm 4
|
../Core/Src/pwm.c:34:6:SetMotPwm 4
|
||||||
../Core/Src/pwm.c:38:6:SetMot 25
|
../Core/Src/pwm.c:38:6:SetMot 25
|
||||||
|
../Core/Src/pwm.c:139:6:SetMotPerc 25
|
||||||
|
|||||||
Binary file not shown.
@@ -3,3 +3,4 @@
|
|||||||
../Core/Src/pwm.c:29:6:StartMot 24 static
|
../Core/Src/pwm.c:29:6:StartMot 24 static
|
||||||
../Core/Src/pwm.c:34:6:SetMotPwm 24 static
|
../Core/Src/pwm.c:34:6:SetMotPwm 24 static
|
||||||
../Core/Src/pwm.c:38:6:SetMot 16 static
|
../Core/Src/pwm.c:38:6:SetMot 16 static
|
||||||
|
../Core/Src/pwm.c:139:6:SetMotPerc 24 static
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user