Control code is now in main loop, keystrokes are send over i2c to keyboard device, added basic upload of code over i2c

This commit is contained in:
Dreaded_X 2020-12-22 01:05:05 +01:00
parent 40aa71275a
commit 279a81716a
11 changed files with 457 additions and 345 deletions

File diff suppressed because one or more lines are too long

8
Inc/firmware.h Normal file
View File

@ -0,0 +1,8 @@
#ifndef FIRMWARE_H
#define FIRMWARE_H
#include "stm32f4xx_hal.h"
void firmware_update();
#endif

View File

@ -51,7 +51,7 @@
/* #define HAL_SRAM_MODULE_ENABLED */ /* #define HAL_SRAM_MODULE_ENABLED */
/* #define HAL_SDRAM_MODULE_ENABLED */ /* #define HAL_SDRAM_MODULE_ENABLED */
/* #define HAL_HASH_MODULE_ENABLED */ /* #define HAL_HASH_MODULE_ENABLED */
/* #define HAL_I2C_MODULE_ENABLED */ #define HAL_I2C_MODULE_ENABLED
/* #define HAL_I2S_MODULE_ENABLED */ /* #define HAL_I2S_MODULE_ENABLED */
/* #define HAL_IWDG_MODULE_ENABLED */ /* #define HAL_IWDG_MODULE_ENABLED */
/* #define HAL_LTDC_MODULE_ENABLED */ /* #define HAL_LTDC_MODULE_ENABLED */
@ -61,7 +61,7 @@
#define HAL_SD_MODULE_ENABLED #define HAL_SD_MODULE_ENABLED
/* #define HAL_MMC_MODULE_ENABLED */ /* #define HAL_MMC_MODULE_ENABLED */
/* #define HAL_SPI_MODULE_ENABLED */ /* #define HAL_SPI_MODULE_ENABLED */
#define HAL_TIM_MODULE_ENABLED /* #define HAL_TIM_MODULE_ENABLED */
#define HAL_UART_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED
/* #define HAL_USART_MODULE_ENABLED */ /* #define HAL_USART_MODULE_ENABLED */
/* #define HAL_IRDA_MODULE_ENABLED */ /* #define HAL_IRDA_MODULE_ENABLED */

View File

@ -56,7 +56,6 @@ void SVC_Handler(void);
void DebugMon_Handler(void); void DebugMon_Handler(void);
void PendSV_Handler(void); void PendSV_Handler(void);
void SysTick_Handler(void); void SysTick_Handler(void);
void TIM3_IRQHandler(void);
void USART2_IRQHandler(void); void USART2_IRQHandler(void);
void OTG_FS_IRQHandler(void); void OTG_FS_IRQHandler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */

View File

@ -1,5 +1,5 @@
########################################################################################################################## ##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.7.1] date: [Wed Sep 02 18:41:02 CEST 2020] # File automatically-generated by tool: [projectgenerator] version: [3.7.1] date: [Thu Oct 01 22:37:12 CEST 2020]
########################################################################################################################## ##########################################################################################################################
# ------------------------------------------------ # ------------------------------------------------
@ -20,7 +20,7 @@ TARGET = z80-stm32-v2
# building variables # building variables
###################################### ######################################
# debug build? # debug build?
DEBUG = 1 DEBUG = 0
# optimization # optimization
OPT = -O3 OPT = -O3
@ -37,6 +37,7 @@ BUILD_DIR = .build
# C sources # C sources
C_SOURCES = \ C_SOURCES = \
Src/main.c \ Src/main.c \
Src/firmware.c \
Src/restart.c \ Src/restart.c \
Src/control.c \ Src/control.c \
Src/profiling.c \ Src/profiling.c \
@ -83,7 +84,9 @@ Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc.c \ Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc.c \
Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c \ Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c \
Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_data.c \ Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_data.c \
Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_scsi.c Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_scsi.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c
# ASM sources # ASM sources
ASM_SOURCES = \ ASM_SOURCES = \

View File

@ -10,8 +10,8 @@
// The top 4 address bits determine which device is used. (16 pages, 256 devices) // The top 4 address bits determine which device is used. (16 pages, 256 devices)
// 0xFF means that the device does not exist // 0xFF means that the device does not exist
// WATCH OUT THE DEVICE ADDRESS NEED TO BE REVERSED (MSB IS ON THE RIGHT) // WATCH OUT THE DEVICE ADDRESS NEED TO BE REVERSED (MSB IS ON THE RIGHT)
uint8_t memory_map_0[8] = {0b00010000, 0b10001000, 0b01001000, 0b11001000, 0b00101000, 0b10101000, 0b01101000, 0b11101000}; uint8_t memory_map_0[16] = {0b00010000, 0b10001000, 0b01001000, 0b11001000, 0b00101000, 0b10101000, 0b01101000, 0b11101000, 0b00011000, 0b10011000, 0b01011000, 0b11011000, 0b00111000, 0b10111000, 0b01111000, 0b11111000};
uint8_t memory_map_1[8] = {0b00001000, 0b10001000, 0b01001000, 0b11001000, 0b00101000, 0b10101000, 0b01101000, 0b11101000}; uint8_t memory_map_1[16] = {0b00001000, 0b10001000, 0b01001000, 0b11001000, 0b00101000, 0b10101000, 0b01101000, 0b11101000, 0b00011000, 0b10011000, 0b01011000, 0b11011000, 0b00111000, 0b10111000, 0b01111000, 0b11111000};
Control control; Control control;
@ -24,10 +24,6 @@ Control control;
uint8_t get_device(uint16_t address) { uint8_t get_device(uint16_t address) {
uint8_t page = address >> 12; uint8_t page = address >> 12;
if (page >= 8) {
return 0xFF;
}
if (control.memory_config == 0) { if (control.memory_config == 0) {
return memory_map_0[page]; return memory_map_0[page];
} else if (control.memory_config == 1) { } else if (control.memory_config == 1) {
@ -143,14 +139,21 @@ void handle_io_read() {
uint8_t address = read_address() & 0xFF; uint8_t address = read_address() & 0xFF;
switch (address) { switch (address) {
case 0x02: // Stand in for graphics hardware
write_data(control.input.c); /* case 0x03: */
control.input.received = 0; /* write_data(0x01); */
break; /* break; */
case 0x03: // Stand in for the keyboard hardware
write_data(0x01 | 0x02*control.input.received); /* case 0x1E: */
break; /* write_data(control.input.c); */
/* control.input.received = 0; */
/* break; */
// Stand in for the keyboard hardware
/* case 0x1F: */
/* write_data(0x01 * control.input.received); */
/* break; */
case 0x08: case 0x08:
if (control.storage.ready && control.storage.action == 0x20) { if (control.storage.ready && control.storage.action == 0x20) {
@ -183,9 +186,13 @@ void handle_io_read() {
write_data(0x08*control.storage.ready); write_data(0x08*control.storage.ready);
break; break;
default: default: {
printf("IO Read: 0x00 @ %.2X\n\r", address); /* uint8_t value = read_data(); */
write_data(0x00); /* #<{(| if (value == 0) { |)}># */
/* printf("IO Read: %.2X @ %.2X\n\r", value, address); */
/* #<{(| } |)}># */
return;
}
} }
enable_data_out(1); enable_data_out(1);
@ -364,6 +371,7 @@ uint8_t control_receive_program(uint8_t byte) {
if (i >= control.eeprom.length) { if (i >= control.eeprom.length) {
i = 0; i = 0;
c = 0;
control.eeprom.programming = 1; control.eeprom.programming = 1;
return 1; return 1;
} }

69
Src/firmware.c Normal file
View File

@ -0,0 +1,69 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "firmware.h"
extern I2C_HandleTypeDef hi2c1;
extern UART_HandleTypeDef huart2;
typedef enum {
TARGET_NONE = 0,
TARGET_ROM,
TARGET_I2C
} UpdateTarget;
void firmware_update() {
printf("FIRMWARE UPDATE\n\r");
UpdateTarget target;
HAL_UART_Receive(&huart2, &target, 1, 1000);
printf("T: %i\n\r", target);
uint8_t address = 0;
if (target == TARGET_I2C) {
HAL_UART_Receive(&huart2, &address, 1, 1000);
printf("A: %i\n\r", address);
}
uint8_t length_buffer[2];
HAL_UART_Receive(&huart2, length_buffer, 2, 1000);
uint16_t length = length_buffer[0] + (length_buffer[1] << 8);
printf("L: %i\n\r", length);
uint8_t* data = malloc(length);
HAL_UART_Receive(&huart2, data, length, 1000);
printf("Firmware received!\n\r");
printf("Uploading to target...\n\r");
switch (target) {
case TARGET_I2C: {
// Upload the application
uint8_t upload_command[4 + length];
upload_command[0] = 0x02;
upload_command[1] = 0x01;
for (uint16_t offset = 0; offset < 8; ++offset) {
upload_command[2] = ((offset*0x80) >> 8) & 0xFF;
upload_command[3] = (offset*0x80) & 0xFF;
// We need to handle the last section properly
memcpy(&upload_command[4], &data[offset*0x80], 0x80);
HAL_I2C_Master_Transmit(&hi2c1, address << 1, upload_command, sizeof(upload_command), 1000);
}
// Start application
uint8_t start_command[] = {0x01, 0x80};
HAL_I2C_Master_Transmit(&hi2c1, address << 1, start_command, sizeof(start_command), 1000);
break;
}
default:
printf("Target not implemented!\n\r");
break;
}
printf("Complete!\n\r");
}

View File

@ -30,6 +30,7 @@
#include <stdio.h> #include <stdio.h>
#include "restart.h" #include "restart.h"
#include "control.h" #include "control.h"
#include "firmware.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@ -49,9 +50,9 @@
/* USER CODE END PM */ /* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
SD_HandleTypeDef hsd; I2C_HandleTypeDef hi2c1;
TIM_HandleTypeDef htim3; SD_HandleTypeDef hsd;
UART_HandleTypeDef huart2; UART_HandleTypeDef huart2;
@ -63,8 +64,8 @@ extern Control control;
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void); void SystemClock_Config(void);
static void MX_GPIO_Init(void); static void MX_GPIO_Init(void);
static void MX_TIM3_Init(void);
static void MX_USART2_UART_Init(void); static void MX_USART2_UART_Init(void);
static void MX_I2C1_Init(void);
static void MX_SDIO_SD_Init(void); static void MX_SDIO_SD_Init(void);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
@ -78,8 +79,6 @@ upload_callback_t upload_callback = NULL;
uint8_t byte; uint8_t byte;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART2) { if (huart->Instance == USART2) {
HAL_UART_Receive_IT(&huart2, &byte, 1);
/* printf("0x%X\n\r", byte); */
if (upload_callback) { if (upload_callback) {
if (upload_callback(byte)) { if (upload_callback(byte)) {
upload_callback = NULL; upload_callback = NULL;
@ -87,6 +86,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
printf("Done\n\r"); printf("Done\n\r");
} }
} else { } else {
static uint8_t cmd_buffer[128]; static uint8_t cmd_buffer[128];
static uint32_t cmd_buffer_len = 0; static uint32_t cmd_buffer_len = 0;
@ -135,6 +135,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
// ONLY SEND THE FIRST CHAR // ONLY SEND THE FIRST CHAR
if (cmd_buffer_len > 0) { if (cmd_buffer_len > 0) {
send_key(byte); send_key(byte);
HAL_I2C_Master_Transmit(&hi2c1, 0x04 << 1, &byte, 1, 1000);
} }
cmd_buffer_len = 0; cmd_buffer_len = 0;
} else if (handle_command && is_command) { } else if (handle_command && is_command) {
@ -161,6 +162,11 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
case '#': case '#':
send_key('#'); send_key('#');
HAL_I2C_Master_Transmit(&hi2c1, 0x04 << 1, &byte, 1, 1000);
break;
case 'a':
firmware_update();
break; break;
default: default:
@ -175,6 +181,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
is_command = 0; is_command = 0;
} }
} }
HAL_UART_Receive_IT(&huart2, &byte, 1);
} }
} }
@ -278,8 +285,8 @@ int main(void)
/* Initialize all configured peripherals */ /* Initialize all configured peripherals */
MX_GPIO_Init(); MX_GPIO_Init();
MX_TIM3_Init();
MX_USART2_UART_Init(); MX_USART2_UART_Init();
MX_I2C1_Init();
MX_SDIO_SD_Init(); MX_SDIO_SD_Init();
MX_FATFS_Init(); MX_FATFS_Init();
MX_USB_DEVICE_Init(); MX_USB_DEVICE_Init();
@ -294,8 +301,6 @@ int main(void)
HAL_UART_Receive_IT(&huart2, &byte, 1); HAL_UART_Receive_IT(&huart2, &byte, 1);
HAL_TIM_Base_Start_IT(&htim3);
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
@ -305,6 +310,7 @@ int main(void)
/* USER CODE END WHILE */ /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN 3 */
// @todo Speed up the main loop
uint8_t temp = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4); uint8_t temp = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4);
if (!temp && zrst) { if (!temp && zrst) {
printf("Restarting Z80\n\r"); printf("Restarting Z80\n\r");
@ -327,6 +333,8 @@ int main(void)
rst = temp; rst = temp;
restart_check(); restart_check();
control_execute_state();
} }
/* USER CODE END 3 */ /* USER CODE END 3 */
} }
@ -373,6 +381,40 @@ void SystemClock_Config(void)
} }
} }
/**
* @brief I2C1 Initialization Function
* @param None
* @retval None
*/
static void MX_I2C1_Init(void)
{
/* USER CODE BEGIN I2C1_Init 0 */
/* USER CODE END I2C1_Init 0 */
/* USER CODE BEGIN I2C1_Init 1 */
/* USER CODE END I2C1_Init 1 */
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN I2C1_Init 2 */
/* USER CODE END I2C1_Init 2 */
}
/** /**
* @brief SDIO Initialization Function * @brief SDIO Initialization Function
* @param None * @param None
@ -401,51 +443,6 @@ static void MX_SDIO_SD_Init(void)
} }
/**
* @brief TIM3 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM3_Init(void)
{
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM3_Init 1 */
/* USER CODE END TIM3_Init 1 */
htim3.Instance = TIM3;
htim3.Init.Prescaler = 40;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 1;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
}
/** /**
* @brief USART2 Initialization Function * @brief USART2 Initialization Function
* @param None * @param None
@ -537,10 +534,8 @@ static void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PC13 PC0 PC3 PC6 /*Configure GPIO pins : PC13 PC0 PC3 */
PC7 */ GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_0|GPIO_PIN_3;
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_6
|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
@ -552,16 +547,18 @@ static void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PA0 PA1 PA8 PA9 /*Configure GPIO pins : PA0 PA1 PA8 PA14
PA10 PA14 PA15 */ PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_8|GPIO_PIN_9 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_8|GPIO_PIN_14
|GPIO_PIN_10|GPIO_PIN_14|GPIO_PIN_15; |GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PA4 PA5 PA6 */ /*Configure GPIO pins : PA4 PA5 PA6 PA9
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6; PA10 */
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_9
|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
@ -589,11 +586,21 @@ static void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PD12 PD13 PD14 PD15 /*Configure GPIO pins : PD12 PD13 PD14 PD15 */
PD0 PD1 PD3 PD4 GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PC6 PC7 */
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PD0 PD1 PD3 PD4
PD5 PD6 PD7 */ PD5 PD6 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4
|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4
|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
@ -610,11 +617,6 @@ static void MX_GPIO_Init(void)
} }
/* USER CODE BEGIN 4 */ /* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == htim3.Instance) {
control_execute_state();
}
}
/* USER CODE END 4 */ /* USER CODE END 4 */
/** /**

View File

@ -77,6 +77,71 @@ void HAL_MspInit(void)
/* USER CODE END MspInit 1 */ /* USER CODE END MspInit 1 */
} }
/**
* @brief I2C MSP Initialization
* This function configures the hardware resources used in this example
* @param hi2c: I2C handle pointer
* @retval None
*/
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(hi2c->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */
__HAL_RCC_GPIOB_CLK_ENABLE();
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
*/
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Peripheral clock enable */
__HAL_RCC_I2C1_CLK_ENABLE();
/* USER CODE BEGIN I2C1_MspInit 1 */
/* USER CODE END I2C1_MspInit 1 */
}
}
/**
* @brief I2C MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param hi2c: I2C handle pointer
* @retval None
*/
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c)
{
if(hi2c->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspDeInit 0 */
/* USER CODE END I2C1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_I2C1_CLK_DISABLE();
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
/* USER CODE BEGIN I2C1_MspDeInit 1 */
/* USER CODE END I2C1_MspDeInit 1 */
}
}
/** /**
* @brief SD MSP Initialization * @brief SD MSP Initialization
* This function configures the hardware resources used in this example * This function configures the hardware resources used in this example
@ -162,56 +227,6 @@ void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd)
} }
/**
* @brief TIM_Base MSP Initialization
* This function configures the hardware resources used in this example
* @param htim_base: TIM_Base handle pointer
* @retval None
*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspInit 0 */
/* USER CODE END TIM3_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM3_CLK_ENABLE();
/* TIM3 interrupt Init */
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM3_IRQn);
/* USER CODE BEGIN TIM3_MspInit 1 */
/* USER CODE END TIM3_MspInit 1 */
}
}
/**
* @brief TIM_Base MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param htim_base: TIM_Base handle pointer
* @retval None
*/
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspDeInit 0 */
/* USER CODE END TIM3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM3_CLK_DISABLE();
/* TIM3 interrupt DeInit */
HAL_NVIC_DisableIRQ(TIM3_IRQn);
/* USER CODE BEGIN TIM3_MspDeInit 1 */
/* USER CODE END TIM3_MspDeInit 1 */
}
}
/** /**
* @brief UART MSP Initialization * @brief UART MSP Initialization
* This function configures the hardware resources used in this example * This function configures the hardware resources used in this example

View File

@ -57,7 +57,6 @@
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
extern PCD_HandleTypeDef hpcd_USB_OTG_FS; extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
extern TIM_HandleTypeDef htim3;
extern UART_HandleTypeDef huart2; extern UART_HandleTypeDef huart2;
/* USER CODE BEGIN EV */ /* USER CODE BEGIN EV */
@ -199,20 +198,6 @@ void SysTick_Handler(void)
/* please refer to the startup file (startup_stm32f4xx.s). */ /* please refer to the startup file (startup_stm32f4xx.s). */
/******************************************************************************/ /******************************************************************************/
/**
* @brief This function handles TIM3 global interrupt.
*/
void TIM3_IRQHandler(void)
{
/* USER CODE BEGIN TIM3_IRQn 0 */
/* USER CODE END TIM3_IRQn 0 */
HAL_TIM_IRQHandler(&htim3);
/* USER CODE BEGIN TIM3_IRQn 1 */
/* USER CODE END TIM3_IRQn 1 */
}
/** /**
* @brief This function handles USART2 global interrupt. * @brief This function handles USART2 global interrupt.
*/ */

View File

@ -1,251 +1,139 @@
#MicroXplorer Configuration settings - do not modify #MicroXplorer Configuration settings - do not modify
Mcu.Family=STM32F4
ProjectManager.MainLocation=Src
PB13.GPIOParameters=GPIO_Speed PB13.GPIOParameters=GPIO_Speed
USB_DEVICE.CLASS_NAME_FS=MSC PC7.GPIOParameters=GPIO_PuPd
PH0-OSC_IN.Signal=RCC_OSC_IN PH0-OSC_IN.Signal=RCC_OSC_IN
USART2.IPParameters=VirtualMode USART2.IPParameters=VirtualMode
RCC.CortexFreq_Value=168000000
ProjectManager.KeepUserCode=true
Mcu.UserName=STM32F407VETx
FATFS0.BSP.semaphore=
PD9.GPIOParameters=GPIO_Speed
FATFS0.BSP.api=Unknown FATFS0.BSP.api=Unknown
VP_FATFS_VS_SDIO.Mode=SDIO VP_FATFS_VS_SDIO.Mode=SDIO
PA10.GPIO_PuPd=GPIO_PULLDOWN
RCC.PLLCLKFreq_Value=168000000 RCC.PLLCLKFreq_Value=168000000
PC10.Signal=SDIO_D2
PC12.Signal=SDIO_CK PC12.Signal=SDIO_CK
RCC.PLLQCLKFreq_Value=48000000 RCC.PLLQCLKFreq_Value=48000000
PC5.Locked=true
PC7.Locked=true PC7.Locked=true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_TIM3_Init-TIM3-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true
PD8.Locked=true PD8.Locked=true
PD9.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PC3.Locked=true PC3.Locked=true
PA11.Mode=Device_Only
RCC.RTCFreq_Value=32000 RCC.RTCFreq_Value=32000
PD6.Locked=true
PC2.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PD0.Locked=true PD0.Locked=true
PD4.Locked=true PD4.Locked=true
PC1.Locked=true
PB11.Signal=GPIO_Output
PB13.Signal=GPIO_Output PB13.Signal=GPIO_Output
PB15.Signal=GPIO_Output
PinOutPanel.RotationAngle=0 PinOutPanel.RotationAngle=0
PE5.GPIOParameters=GPIO_PuPd
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
ProjectManager.StackSize=0x400
PB11.GPIO_Speed=GPIO_SPEED_FREQ_LOW PB11.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PD13.Signal=GPIO_Input
Mcu.IP4=SYS
RCC.FCLKCortexFreq_Value=168000000
Mcu.IP5=TIM3
PD13.Locked=true
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false
Mcu.IP2=RCC PD15.GPIOParameters=GPIO_PuPd
Mcu.IP3=SDIO
Mcu.IP0=FATFS
Mcu.IP1=NVIC
PA12.Signal=USB_OTG_FS_DP
PE4.GPIOParameters=GPIO_Speed,PinState
Mcu.UserConstants=
PE5.GPIO_PuPd=GPIO_PULLUP
PA7.PinState=GPIO_PIN_RESET
VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO
PC1.GPIOParameters=GPIO_Speed,PinState
Mcu.ThirdPartyNb=0
RCC.HCLKFreq_Value=168000000
Mcu.IPNb=9
RCC.I2SClocksFreq_Value=96000000
ProjectManager.PreviousToolchain=
PD4.Signal=GPIO_Input PD4.Signal=GPIO_Input
RCC.APB2TimFreq_Value=168000000 RCC.APB2TimFreq_Value=168000000
TIM3.Period=1 PB6.Signal=I2C1_SCL
RCC.VcooutputI2S=96000000
PC7.Signal=GPIO_Input PC7.Signal=GPIO_Input
PD8.GPIOParameters=GPIO_Speed PB6.Mode=I2C
PC3.Signal=GPIO_Input PC3.Signal=GPIO_Input
Mcu.Pin6=PC14-OSC32_IN
PD0.Signal=GPIO_Input PD0.Signal=GPIO_Input
Mcu.Pin7=PC15-OSC32_OUT
PD8.Signal=GPIO_Output PD8.Signal=GPIO_Output
PE5.Signal=GPIO_Input PE5.Signal=GPIO_Input
Mcu.Pin8=PH0-OSC_IN
Mcu.Pin9=PH1-OSC_OUT
PE1.Signal=GPIO_Input PE1.Signal=GPIO_Input
PC1.PinState=GPIO_PIN_SET PC1.PinState=GPIO_PIN_SET
RCC.AHBFreq_Value=168000000
PH0-OSC_IN.Mode=HSE-External-Oscillator
PB13.Locked=true PB13.Locked=true
FATFS0.BSP.ip=GPIO FATFS0.BSP.ip=GPIO
Mcu.Pin0=PE2
Mcu.Pin1=PE3
GPIO.groupedBy=Group By Peripherals
Mcu.Pin2=PE4
Mcu.Pin3=PE5
Mcu.Pin4=PE6
PD10.GPIOParameters=GPIO_Speed
Mcu.Pin5=PC13-ANTI_TAMP
ProjectManager.ProjectBuild=false ProjectManager.ProjectBuild=false
RCC.HSE_VALUE=25000000
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PA4.GPIO_PuPd=GPIO_PULLDOWN
PA8.Locked=true PA8.Locked=true
FATFS0.BSP.i2caddr=0 FATFS0.BSP.i2caddr=0
PA4.Locked=true PA4.Locked=true
PC13-ANTI_TAMP.Signal=GPIO_Input PC13-ANTI_TAMP.Signal=GPIO_Input
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true
ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.25.0 ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.25.0
PC4.GPIO_Speed=GPIO_SPEED_FREQ_LOW
MxDb.Version=DB.5.0.60 MxDb.Version=DB.5.0.60
PA6.GPIO_PuPd=GPIO_PULLDOWN
ProjectManager.BackupPrevious=false ProjectManager.BackupPrevious=false
PC14-OSC32_IN.Mode=LSE-External-Oscillator
RCC.VCOInputFreq_Value=1000000
PE4.GPIO_Speed=GPIO_SPEED_FREQ_LOW
TIM3.Prescaler=160
PA5.GPIO_PuPd=GPIO_PULLDOWN PA5.GPIO_PuPd=GPIO_PULLDOWN
File.Version=6
PC9.Mode=SD_4_bits_Wide_bus PC9.Mode=SD_4_bits_Wide_bus
PE3.GPIOParameters=GPIO_Speed
PE3.Locked=true
PE2.Signal=GPIO_Input PE2.Signal=GPIO_Input
PA8.Signal=GPIO_Input PA8.Signal=GPIO_Input
PB8.Locked=true PD14.GPIO_PuPd=GPIO_PULLDOWN
PE1.Locked=true PE1.Locked=true
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PD10.GPIO_Speed=GPIO_SPEED_FREQ_LOW PB6.GPIO_PuPdOD=GPIO_NOPULL
PE4.Signal=GPIO_Output
ProjectManager.HalAssertFull=false ProjectManager.HalAssertFull=false
ProjectManager.ProjectName=z80-stm32-v2
PH1-OSC_OUT.Mode=HSE-External-Oscillator
RCC.MCO2PinFreq_Value=168000000 RCC.MCO2PinFreq_Value=168000000
Mcu.Package=LQFP100 Mcu.Package=LQFP100
PB9.Signal=GPIO_Input PB9.Signal=GPIO_Input
PA6.Signal=GPIO_Input
PA7.Locked=true
PA5.Locked=true PA5.Locked=true
PD11.Locked=true PD11.Locked=true
USART2.VirtualMode=VM_ASYNC
PD12.Signal=GPIO_Input PD12.Signal=GPIO_Input
FATFS0.BSP.solution=PA8 FATFS0.BSP.solution=PA8
PA14.Locked=true PA14.Locked=true
NVIC.OTG_FS_IRQn=true\:0\:0\:false\:false\:true\:false\:true
ProjectManager.ToolChainLocation=
PD14.Locked=true
RCC.LSI_VALUE=32000
VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_SYS_VS_Systick.Signal=SYS_VS_Systick
PA10.Signal=GPIO_Input PA10.Signal=GPIO_Input
USB_OTG_FS.VirtualMode=Device_Only PC6.GPIO_PuPd=GPIO_PULLDOWN
PA15.Signal=GPIO_Input
PA5.GPIOParameters=GPIO_PuPd PA5.GPIOParameters=GPIO_PuPd
PC11.Mode=SD_4_bits_Wide_bus PC11.Mode=SD_4_bits_Wide_bus
PB14.GPIOParameters=GPIO_Speed PB14.GPIOParameters=GPIO_Speed
RCC.APB2CLKDivider=RCC_HCLK_DIV2 RCC.APB2CLKDivider=RCC_HCLK_DIV2
RCC.APB1TimFreq_Value=84000000 RCC.APB1TimFreq_Value=84000000
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PC4.Locked=true
PC5.Signal=GPIO_Output
VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS.Mode=MSC_FS VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS.Mode=MSC_FS
USB_OTG_FS.IPParameters=VirtualMode USB_OTG_FS.IPParameters=VirtualMode
PE6.Locked=true PE6.Locked=true
PD6.Signal=GPIO_Input
PD5.Locked=true PD5.Locked=true
PD15.Signal=GPIO_Input PD15.Signal=GPIO_Input
ProjectManager.CustomerFirmwarePackage= ProjectManager.CustomerFirmwarePackage=
PC4.GPIOParameters=GPIO_Speed PC4.GPIOParameters=GPIO_Speed
VP_TIM3_VS_ClockSourceINT.Mode=Internal
PB15.Locked=true
PB3.Locked=true
PB4.Signal=GPIO_Input
PA3.Signal=USART2_RX
VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_MSC_FS VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_MSC_FS
PA6.GPIOParameters=GPIO_PuPd PA6.GPIOParameters=GPIO_PuPd
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
FATFS0.BSP.STBoard=false FATFS0.BSP.STBoard=false
USB_DEVICE.VirtualMode-MSC_FS=Msc
ProjectManager.ProjectFileName=z80-stm32-v2.ioc ProjectManager.ProjectFileName=z80-stm32-v2.ioc
Mcu.PinsNb=70 Mcu.PinsNb=71
ProjectManager.NoMain=false
USB_DEVICE.VirtualModeFS=Msc_FS
PC11.Signal=SDIO_D3
FATFS0.BSP.mode=Input FATFS0.BSP.mode=Input
PD3.Signal=GPIO_Input PD3.Signal=GPIO_Input
PC8.Signal=SDIO_D0 Mcu.Pin70=VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS
PC2.Signal=GPIO_Output
PC4.Signal=GPIO_Output
PC6.Signal=GPIO_Input PC6.Signal=GPIO_Input
PC10.Mode=SD_4_bits_Wide_bus PC2.Signal=GPIO_Output
PD13.GPIOParameters=GPIO_PuPd
PD7.Signal=GPIO_Input PD7.Signal=GPIO_Input
PD1.Signal=GPIO_Input PD1.Signal=GPIO_Input
ProjectManager.DefaultFWLocation=true Mcu.Pin68=VP_FATFS_VS_SDIO
PD9.Signal=GPIO_Output Mcu.Pin69=VP_SYS_VS_Systick
PD5.Signal=GPIO_Input
PB12.Locked=true
ProjectManager.DeletePrevious=true
Mcu.Pin68=VP_TIM3_VS_ClockSourceINT
Mcu.Pin69=VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS
PC0.Signal=GPIO_Input PC0.Signal=GPIO_Input
PB14.Locked=true PB14.Locked=true
RCC.APB1CLKDivider=RCC_HCLK_DIV4 RCC.APB1CLKDivider=RCC_HCLK_DIV4
PC14-OSC32_IN.Signal=RCC_OSC32_IN PC14-OSC32_IN.Signal=RCC_OSC32_IN
Mcu.Pin62=PB8 Mcu.Pin62=PB6
USB_DEVICE.IPParameters=VirtualMode-MSC_FS,VirtualModeFS,CLASS_NAME_FS Mcu.Pin63=PB7
Mcu.Pin63=PB9
Mcu.Pin60=PB4 Mcu.Pin60=PB4
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true
Mcu.Pin61=PB5 Mcu.Pin61=PB5
Mcu.Pin66=VP_FATFS_VS_SDIO Mcu.Pin66=PE0
Mcu.Pin67=VP_SYS_VS_Systick Mcu.Pin67=PE1
RCC.FamilyName=M Mcu.Pin64=PB8
Mcu.Pin64=PE0 Mcu.Pin65=PB9
Mcu.Pin65=PE1
PA0-WKUP.Signal=GPIO_Input PA0-WKUP.Signal=GPIO_Input
PA0-WKUP.Locked=true
PD12.Locked=true
FATFS0.BSP.instance=PA8
PD10.Signal=GPIO_Output PD10.Signal=GPIO_Output
PA3.Mode=Asynchronous PA3.Mode=Asynchronous
PA15.Locked=true PA15.Locked=true
Mcu.Pin59=PB3 Mcu.Pin59=PB3
Mcu.Pin57=PD6 Mcu.Pin57=PD6
Mcu.Pin58=PD7 Mcu.Pin58=PD7
ProjectManager.TargetToolchain=Makefile
PB14.GPIO_Speed=GPIO_SPEED_FREQ_LOW PB14.GPIO_Speed=GPIO_SPEED_FREQ_LOW
Mcu.Pin51=PD0 Mcu.Pin51=PD0
Mcu.Pin52=PD1 Mcu.Pin52=PD1
FATFS0.BSP.condition= I2C1.I2C_Mode=I2C_Standard
Mcu.Pin50=PC12 Mcu.Pin50=PC12
PD11.GPIO_Speed=GPIO_SPEED_FREQ_LOW PD11.GPIO_Speed=GPIO_SPEED_FREQ_LOW
Mcu.Pin55=PD4 Mcu.Pin55=PD4
Mcu.Pin56=PD5 Mcu.Pin56=PD5
Mcu.Pin53=PD2 Mcu.Pin53=PD2
Mcu.Pin54=PD3 Mcu.Pin54=PD3
PC5.GPIOParameters=GPIO_Speed
PC6.Locked=true PC6.Locked=true
PA9.Signal=GPIO_Input PA9.Signal=GPIO_Input
PB13.GPIO_Speed=GPIO_SPEED_FREQ_LOW PB13.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PE4.Locked=true
PB11.GPIOParameters=GPIO_Speed PB11.GPIOParameters=GPIO_Speed
PB5.Locked=true PB5.Locked=true
PB9.Locked=true PB9.Locked=true
PC2.Locked=true PC7.GPIO_PuPd=GPIO_PULLDOWN
PE0.Locked=true
VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
PD7.Locked=true PD7.Locked=true
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
PD3.Locked=true
PA1.Signal=GPIO_Input
Mcu.Pin48=PC10 Mcu.Pin48=PC10
PB12.GPIO_Speed=GPIO_SPEED_FREQ_LOW
Mcu.Pin49=PC11 Mcu.Pin49=PC11
Mcu.Pin46=PA14 Mcu.Pin46=PA14
Mcu.Pin47=PA15 Mcu.Pin47=PA15
RCC.VCOI2SOutputFreq_Value=192000000
PB14.Signal=GPIO_Output PB14.Signal=GPIO_Output
PD2.Mode=SD_4_bits_Wide_bus
FATFS.BSP.number=1 FATFS.BSP.number=1
PA5.Signal=GPIO_Input PA5.Signal=GPIO_Input
Mcu.Pin40=PC9 Mcu.Pin40=PC9
@ -254,16 +142,9 @@ Mcu.Pin44=PA11
PC12.Mode=SD_4_bits_Wide_bus PC12.Mode=SD_4_bits_Wide_bus
Mcu.Pin45=PA12 Mcu.Pin45=PA12
Mcu.Pin42=PA9 Mcu.Pin42=PA9
board=custom
Mcu.Pin43=PA10 Mcu.Pin43=PA10
RCC.VCOOutputFreq_Value=336000000
PC13-ANTI_TAMP.Locked=true
ProjectManager.LastFirmware=true ProjectManager.LastFirmware=true
PA7.GPIO_Speed=GPIO_SPEED_FREQ_LOW PA7.GPIO_Speed=GPIO_SPEED_FREQ_LOW
NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true
PD11.GPIOParameters=GPIO_Speed
RCC.APB2Freq_Value=84000000
MxCube.Version=5.6.0
Mcu.Pin37=PC6 Mcu.Pin37=PC6
Mcu.Pin38=PC7 Mcu.Pin38=PC7
Mcu.Pin35=PD14 Mcu.Pin35=PD14
@ -272,64 +153,42 @@ Mcu.Pin39=PC8
FATFS0.BSP.i2creg= FATFS0.BSP.i2creg=
PC2.GPIOParameters=GPIO_Speed,PinState PC2.GPIOParameters=GPIO_Speed,PinState
Mcu.Pin30=PD9 Mcu.Pin30=PD9
VP_SYS_VS_Systick.Mode=SysTick
RCC.EthernetFreq_Value=168000000 RCC.EthernetFreq_Value=168000000
Mcu.Pin33=PD12 Mcu.Pin33=PD12
TIM3.IPParameters=Prescaler,Period
PH1-OSC_OUT.Signal=RCC_OSC_OUT
Mcu.Pin34=PD13 Mcu.Pin34=PD13
Mcu.Pin31=PD10 Mcu.Pin31=PD10
PC1.GPIO_Speed=GPIO_SPEED_FREQ_LOW
Mcu.Pin32=PD11 Mcu.Pin32=PD11
PC1.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PA9.Locked=true PA9.Locked=true
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PA4.GPIOParameters=GPIO_PuPd PB7.GPIO_PuPdOD=GPIO_NOPULL
PE5.Locked=true
PE6.Signal=GPIO_Input
ProjectManager.FreePins=false ProjectManager.FreePins=false
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
ProjectManager.AskForMigrate=true
Mcu.Name=STM32F407V(E-G)Tx
PE0.Signal=GPIO_Input
Mcu.Pin26=PB13 Mcu.Pin26=PB13
Mcu.Pin27=PB14 Mcu.Pin27=PB14
RCC.RTCHSEDivFreq_Value=12500000 RCC.RTCHSEDivFreq_Value=12500000
PA2.Signal=USART2_TX
Mcu.Pin24=PB11 Mcu.Pin24=PB11
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
Mcu.Pin25=PB12 Mcu.Pin25=PB12
Mcu.IP8=USB_OTG_FS
Mcu.Pin28=PB15 Mcu.Pin28=PB15
PD14.Signal=GPIO_Input
Mcu.IP6=USART2
Mcu.Pin29=PD8
PC8.Mode=SD_4_bits_Wide_bus PC8.Mode=SD_4_bits_Wide_bus
Mcu.IP7=USB_DEVICE Mcu.Pin29=PD8
ProjectManager.CoupleFile=false
PB4.Locked=true PB4.Locked=true
RCC.48MHZClocksFreq_Value=48000000 PD14.GPIOParameters=GPIO_PuPd
PB3.Signal=GPIO_Input
PA4.Signal=GPIO_Input PA4.Signal=GPIO_Input
RCC.SYSCLKFreq_VALUE=168000000
Mcu.Pin22=PC4 Mcu.Pin22=PC4
PB5.Signal=GPIO_Input PB5.Signal=GPIO_Input
Mcu.Pin23=PC5 Mcu.Pin23=PC5
PA1.Locked=true
Mcu.Pin20=PA6 Mcu.Pin20=PA6
Mcu.Pin21=PA7 Mcu.Pin21=PA7
PC2.PinState=GPIO_PIN_SET
PD10.Locked=true PD10.Locked=true
PA12.Mode=Device_Only
PA10.Locked=true PA10.Locked=true
NVIC.ForceEnableDMAVector=true NVIC.ForceEnableDMAVector=true
KeepUserPlacement=false
PE3.GPIO_Speed=GPIO_SPEED_FREQ_LOW PE3.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PD11.Signal=GPIO_Output PD11.Signal=GPIO_Output
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false
ProjectManager.CompilerOptimize=6 ProjectManager.CompilerOptimize=6
PD15.Locked=true PD15.Locked=true
PA11.Signal=USB_OTG_FS_DM PA11.Signal=USB_OTG_FS_DM
PA14.Signal=GPIO_Input
ProjectManager.HeapSize=0x200 ProjectManager.HeapSize=0x200
Mcu.Pin15=PA1 Mcu.Pin15=PA1
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
@ -339,36 +198,200 @@ Mcu.Pin14=PA0-WKUP
Mcu.Pin19=PA5 Mcu.Pin19=PA5
ProjectManager.ComputerToolchain=false ProjectManager.ComputerToolchain=false
Mcu.Pin17=PA3 Mcu.Pin17=PA3
RCC.HSI_VALUE=16000000
Mcu.Pin18=PA4 Mcu.Pin18=PA4
PD8.GPIO_Speed=GPIO_SPEED_FREQ_LOW PD8.GPIO_Speed=GPIO_SPEED_FREQ_LOW
RCC.PLLQ=7
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
Mcu.Pin11=PC1 Mcu.Pin11=PC1
Mcu.Pin12=PC2
PC5.GPIO_Speed=GPIO_SPEED_FREQ_LOW PC5.GPIO_Speed=GPIO_SPEED_FREQ_LOW
FATFS0.BSP.component= Mcu.Pin12=PC2
RCC.PLLM=25
RCC.PLLN=336
Mcu.Pin10=PC0 Mcu.Pin10=PC0
PE2.Locked=true
PE3.Signal=GPIO_Output PE3.Signal=GPIO_Output
PA2.Mode=Asynchronous PE2.Locked=true
PB8.Signal=GPIO_Input
PE4.PinState=GPIO_PIN_SET PE4.PinState=GPIO_PIN_SET
PC9.Signal=SDIO_D1
PD2.Signal=SDIO_CMD PD2.Signal=SDIO_CMD
PD9.Locked=true
RCC.APB1Freq_Value=42000000
PD1.Locked=true PD1.Locked=true
PA7.GPIOParameters=GPIO_Speed,PinState PA7.GPIOParameters=GPIO_Speed,PinState
PC0.Locked=true PC0.Locked=true
PB11.Locked=true
ProjectManager.DeviceId=STM32F407VETx
PC1.Signal=GPIO_Output PC1.Signal=GPIO_Output
PB12.GPIOParameters=GPIO_Speed PB12.GPIOParameters=GPIO_Speed
PB12.Signal=GPIO_Output
FATFS0.BSP.name=Detect_SDIO FATFS0.BSP.name=Detect_SDIO
Mcu.Family=STM32F4
ProjectManager.MainLocation=Src
USB_DEVICE.CLASS_NAME_FS=MSC
RCC.CortexFreq_Value=168000000
ProjectManager.KeepUserCode=true
Mcu.UserName=STM32F407VETx
FATFS0.BSP.semaphore=
PD9.GPIOParameters=GPIO_Speed
PC10.Signal=SDIO_D2
PC5.Locked=true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_SDIO_SD_Init-SDIO-false-HAL-true,6-MX_FATFS_Init-FATFS-false-HAL-false,7-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false
PA9.GPIOParameters=GPIO_PuPd
PD9.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PA11.Mode=Device_Only
PD6.Locked=true
PC2.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PC1.Locked=true
PB11.Signal=GPIO_Output
PB15.Signal=GPIO_Output
PE5.GPIOParameters=GPIO_PuPd
ProjectManager.StackSize=0x400
PD13.Signal=GPIO_Input
Mcu.IP4=SDIO
RCC.FCLKCortexFreq_Value=168000000
Mcu.IP5=SYS
Mcu.IP2=NVIC
I2C1.IPParameters=ClockSpeed,I2C_Mode
PD13.Locked=true
Mcu.IP3=RCC
Mcu.IP0=FATFS
Mcu.IP1=I2C1
PA12.Signal=USB_OTG_FS_DP
PE4.GPIOParameters=GPIO_Speed,PinState
Mcu.UserConstants=
PE5.GPIO_PuPd=GPIO_PULLUP
PA7.PinState=GPIO_PIN_RESET
I2C1.ClockSpeed=100000
PC1.GPIOParameters=GPIO_Speed,PinState
Mcu.ThirdPartyNb=0
RCC.HCLKFreq_Value=168000000
Mcu.IPNb=9
RCC.I2SClocksFreq_Value=96000000
ProjectManager.PreviousToolchain=
RCC.VcooutputI2S=96000000
PD8.GPIOParameters=GPIO_Speed
Mcu.Pin6=PC14-OSC32_IN
Mcu.Pin7=PC15-OSC32_OUT
Mcu.Pin8=PH0-OSC_IN
Mcu.Pin9=PH1-OSC_OUT
RCC.AHBFreq_Value=168000000
PH0-OSC_IN.Mode=HSE-External-Oscillator
Mcu.Pin0=PE2
Mcu.Pin1=PE3
GPIO.groupedBy=Group By Peripherals
Mcu.Pin2=PE4
Mcu.Pin3=PE5
Mcu.Pin4=PE6
PD10.GPIOParameters=GPIO_Speed
Mcu.Pin5=PC13-ANTI_TAMP
RCC.HSE_VALUE=25000000
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PA4.GPIO_PuPd=GPIO_PULLDOWN
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true
PC4.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PA6.GPIO_PuPd=GPIO_PULLDOWN
PC14-OSC32_IN.Mode=LSE-External-Oscillator
RCC.VCOInputFreq_Value=1000000
PE4.GPIO_Speed=GPIO_SPEED_FREQ_LOW
File.Version=6
PE3.GPIOParameters=GPIO_Speed
PE3.Locked=true
PB7.Signal=I2C1_SDA
PB8.Locked=true
PD10.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PE4.Signal=GPIO_Output
PB6.GPIOParameters=GPIO_PuPdOD
ProjectManager.ProjectName=z80-stm32-v2
PH1-OSC_OUT.Mode=HSE-External-Oscillator
PA6.Signal=GPIO_Input
PA7.Locked=true
USART2.VirtualMode=VM_ASYNC
NVIC.OTG_FS_IRQn=true\:0\:0\:false\:false\:true\:false\:true
ProjectManager.ToolChainLocation=
PD15.GPIO_PuPd=GPIO_PULLDOWN
PD14.Locked=true
RCC.LSI_VALUE=32000
USB_OTG_FS.VirtualMode=Device_Only
PA15.Signal=GPIO_Input
PC4.Locked=true
PC5.Signal=GPIO_Output
PD6.Signal=GPIO_Input
PB15.Locked=true
PB3.Locked=true
PB4.Signal=GPIO_Input
PA3.Signal=USART2_RX
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
USB_DEVICE.VirtualMode-MSC_FS=Msc
ProjectManager.NoMain=false
USB_DEVICE.VirtualModeFS=Msc_FS
PC11.Signal=SDIO_D3
PC8.Signal=SDIO_D0
PC4.Signal=GPIO_Output
PC10.Mode=SD_4_bits_Wide_bus
ProjectManager.DefaultFWLocation=true
PD9.Signal=GPIO_Output
PD5.Signal=GPIO_Input
PB12.Locked=true
ProjectManager.DeletePrevious=true
USB_DEVICE.IPParameters=VirtualMode-MSC_FS,VirtualModeFS,CLASS_NAME_FS
PA9.GPIO_PuPd=GPIO_PULLDOWN
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true
RCC.FamilyName=M
PA0-WKUP.Locked=true
PD12.Locked=true
FATFS0.BSP.instance=PA8
PD12.GPIOParameters=GPIO_PuPd
ProjectManager.TargetToolchain=Makefile
FATFS0.BSP.condition=
PB7.GPIOParameters=GPIO_PuPdOD
PC5.GPIOParameters=GPIO_Speed
PE4.Locked=true
PC2.Locked=true
ProjectManager.RegisterCallBack=
PE0.Locked=true
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
PD3.Locked=true
PA1.Signal=GPIO_Input
PB12.GPIO_Speed=GPIO_SPEED_FREQ_LOW
RCC.VCOI2SOutputFreq_Value=192000000
PD2.Mode=SD_4_bits_Wide_bus
board=custom
RCC.VCOOutputFreq_Value=336000000
PC13-ANTI_TAMP.Locked=true
PD11.GPIOParameters=GPIO_Speed
RCC.APB2Freq_Value=84000000
MxCube.Version=5.6.0
VP_SYS_VS_Systick.Mode=SysTick
PA10.GPIOParameters=GPIO_PuPd
PH1-OSC_OUT.Signal=RCC_OSC_OUT
PD13.GPIO_PuPd=GPIO_PULLDOWN
PA4.GPIOParameters=GPIO_PuPd
PE5.Locked=true
PE6.Signal=GPIO_Input
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
ProjectManager.AskForMigrate=true
Mcu.Name=STM32F407V(E-G)Tx
PE0.Signal=GPIO_Input
PA2.Signal=USART2_TX
Mcu.IP8=USB_OTG_FS
PD14.Signal=GPIO_Input
Mcu.IP6=USART2
Mcu.IP7=USB_DEVICE
ProjectManager.CoupleFile=false
RCC.48MHZClocksFreq_Value=48000000
PB3.Signal=GPIO_Input
RCC.SYSCLKFreq_VALUE=168000000
PA1.Locked=true
PC2.PinState=GPIO_PIN_SET
PA12.Mode=Device_Only
KeepUserPlacement=false
PB7.Mode=I2C
PA14.Signal=GPIO_Input
PC6.GPIOParameters=GPIO_PuPd
RCC.HSI_VALUE=16000000
RCC.PLLQ=7
FATFS0.BSP.component=
RCC.PLLM=25
RCC.PLLN=336
PA2.Mode=Asynchronous
PB8.Signal=GPIO_Input
PC9.Signal=SDIO_D1
PD9.Locked=true
RCC.APB1Freq_Value=42000000
PB11.Locked=true
ProjectManager.DeviceId=STM32F407VETx
PB12.Signal=GPIO_Output
ProjectManager.LibraryCopy=0 ProjectManager.LibraryCopy=0
PD12.GPIO_PuPd=GPIO_PULLDOWN
PA7.Signal=GPIO_Output PA7.Signal=GPIO_Output
PA6.Locked=true PA6.Locked=true