This commit is contained in:
Vasily Markov 2024-04-02 12:47:04 +03:00
parent cdd61312bf
commit dcc1e2161b
9 changed files with 204 additions and 67 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
build build
STM32F439.svd
putty_run

18
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,18 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceFolder}",
"executable": "${workspaceRoot}/build/stm32.elf",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"servertype": "stutil",
"preLaunchTask" : "run OpenOCD",
"preRestartCommands" : [ "load", "enable breakpoint", "monitor reset" ],
"showDevDebugOutput" : "raw",
"svdFile" : "${workspaceRoot}/STM32F439.svd"
}
]
}

117
.vscode/tasks.json vendored
View File

@ -39,48 +39,85 @@
} }
}, },
{ {
"label": "clean", "label": "clean",
"type": "shell", "type": "shell",
"command": "rm", "command": "rm",
"args": [ "args": [
"-rf", "-rf",
"${workspaceFolder}/build" "${workspaceFolder}/build"
], ],
"options": { "options": {
"cwd": "${workspaceFolder}" "cwd": "${workspaceFolder}"
}, },
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
} }
}, },
{ {
"label": "flash", "label": "flash",
"type": "shell", "type": "shell",
"command": "openocd", "command": "openocd",
"args": [ "args": [
"-f", "-f",
"interface/stlink-v2.cfg", "interface/stlink-v2.cfg",
"-f", "-f",
"target/stm32f4x.cfg", "target/stm32f4x.cfg",
"-c", "-c",
"init", "init",
"-c", "-c",
"reset halt", "reset halt",
"-c", "-c",
"flash write_image erase ${workspaceFolder}/build/stm32.elf", "flash write_image erase ${workspaceFolder}/build/stm32.hex",
"-c", "-c",
"reset", "reset",
"-c", "-c",
"exit" "exit"
], ],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
}, },
"problemMatcher": [ "problemMatcher": [
"$gcc" "$gcc"
] ]
} },
{
"label": "run OpenOCD",
"type": "shell",
"command": "openocd",
"args": [
"-f",
"interface/stlink-v2.cfg",
"-f",
"target/stm32f4x.cfg"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
],
"isBackground": true
},
{
"label": "gdb",
"type": "shell",
"command": "gdb",
"args": [
"${workspaceFolder}/build/stm32.elf",
"-ex",
"target remote :3333"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"dependsOn": [
"run OpenOCD"
]
},
] ]
} }

View File

@ -40,6 +40,7 @@ file(GLOB_RECURSE SOURCES
"startup_stm32f4xx.S" "startup_stm32f4xx.S"
"lib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c" "lib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c"
"lib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c" "lib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c"
"lib/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c"
) )
set(LINKER_SCRIPT ${PROJECT_SOURCE_DIR}/stm32_flash.ld) set(LINKER_SCRIPT ${PROJECT_SOURCE_DIR}/stm32_flash.ld)

View File

@ -1,29 +1,32 @@
#include "app.h" #include "app.h"
const uint16_t leds = GPIO_Pin_0 | GPIO_Pin_7 | GPIO_Pin_14;
const uint16_t leds_arr[4] = {GPIO_Pin_0, GPIO_Pin_7, GPIO_Pin_14};
void delay(uint32_t ms) { void delay(uint32_t ms) {
ms *= 3360; ms *= 16800;
while(ms--) { while(ms--) {
__NOP(); __NOP();
} }
} }
void loop() { void loop() {
static uint32_t counter = 0; GPIO_ToggleBits(GPIOB, GPIO_Pin_7);
++counter; delay(500);
GPIO_ResetBits(GPIOB, leds);
GPIO_SetBits(GPIOB, leds_arr[counter % 3]);
delay(250);
} }
void app() { void app() {
volatile uint8_t sendData[8];
volatile uint8_t bytesToSend = 8;
// Счетчик отправленных байт
volatile uint8_t sendDataCounter = 0;
for (uint8_t i = 0; i < 8; i++)
{
sendData[i] = i;
}
// USART_ITConfig(USART2, USART_IT_TC, ENABLE);
while(1) { while(1) {
USART_SendData(USART2, sendData[sendDataCounter++ % 8]);
loop(); loop();
}; };
} }

View File

@ -1,17 +1,98 @@
#include "bsp.h" #include "bsp.h"
const uint16_t LEDS = GPIO_Pin_0 | GPIO_Pin_7 | GPIO_Pin_14;
const uint16_t LED[4] = {GPIO_Pin_0, GPIO_Pin_7, GPIO_Pin_14};
void board_init() { #define PLL_M 4
#define PLL_N 168
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P 2
/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */
#define PLL_Q 7
void SysTick_Handler(void)
{
//GPIO_ToggleBits(GPIOB, GPIO_Pin_0);
}
void USART2_IRQHandler()
{
}
void sysTick_init(void) {
uint32_t tick = SystemCoreClock/2 - 1;
SysTick->LOAD = tick;
SysTick->VAL = tick;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;
}
void systemClock_init(void) {
RCC_DeInit(); // Reset RCC configuration to default values
RCC_HSEConfig(RCC_HSE_ON); // Enable HSE (High Speed External) clock
if (RCC_WaitForHSEStartUp() == SUCCESS) { // Wait for HSE clock to stabilize
RCC_PLLConfig(RCC_PLLSource_HSE, PLL_M, PLL_N, PLL_P, PLL_Q); // Configure PLL
RCC_PLLCmd(ENABLE); // Enable PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // Wait for PLL to stabilize
FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Set PLL as system clock
while (RCC_GetSYSCLKSource() != RCC_CFGR_SWS_PLL); // Wait for PLL to become system clock
}
}
void gpio_init() {
const uint16_t led_pins = GPIO_Pin_0 | GPIO_Pin_7 | GPIO_Pin_14;
const uint16_t usart_pins = GPIO_Pin_5 | GPIO_Pin_6;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitTypeDef gpio; GPIO_InitTypeDef gpio;
GPIO_StructInit(&gpio); GPIO_StructInit(&gpio);
gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_Mode = GPIO_Mode_OUT;
gpio.GPIO_Pin = LEDS; gpio.GPIO_Pin = led_pins;
GPIO_Init(GPIOB, &gpio); GPIO_Init(GPIOB, &gpio);
GPIO_ResetBits(GPIOB, led_pins);
gpio.GPIO_Mode = GPIO_Mode_AF;
gpio.GPIO_Pin = usart_pins;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
gpio.GPIO_OType = GPIO_OType_PP;
gpio.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOD, &gpio);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2);
}
void usart_init() {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
USART_InitTypeDef usart;
usart.USART_BaudRate = 115200;
usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &usart);
USART_Cmd(USART2, ENABLE);
//NVIC_EnableIRQ(USART2_IRQn);
}
void board_init() {
SystemInit();
//systemClock_init();
sysTick_init();
//__enable_irq();
gpio_init();
usart_init();
GPIO_SetBits(GPIOB, LEDS);
} }

View File

@ -1,4 +0,0 @@
telnet localhost 4444
reset halt
flash write_image erase stm32.hex
reset

View File

@ -1 +0,0 @@
openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg

View File

@ -150,7 +150,7 @@
#define PLL_N 336 #define PLL_N 336
/* SYSCLK = PLL_VCO / PLL_P */ /* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P 4 #define PLL_P 2
/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ /* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */
#define PLL_Q 7 #define PLL_Q 7