/**************************************************
Este ambiente simulado reproduz parcialmente o
hardware da placa que está sendo usada em sala.
Códigos podem ser alterados/modificados no main() desde
que mantidas as chamadas as funções de inicialização/
configuração:
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
Nada fora da área indicada no comentário dentro
do main() deve ser alterado/apagado. Toda a configuração
dos GPIOs utilizados já são configurados corretamente
(entradas e saídas).
A rotina de tratamento de interrupção de timer
que implementa o SysTick está presente nesta implementação
e pode ser usada.
Funções adicionais também podem ser criadas.
Atenção: por se tratar de um ambiente simulado,
efeitos referentes a temporizações podem não corresponder
ao que vai ocorrer na placa física: por exemplo o intervalo para a
multiplexação dos displays de 7 segmentos.
*****************************************/
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stm32f1xx_hal.h>
/* Private defines -----------------------------------------------------------*/
#define SW1_Pin GPIO_PIN_13
#define SW1_GPIO_Port GPIOC
#define SW2_Pin GPIO_PIN_14
#define SW2_GPIO_Port GPIOC
#define SW3_Pin GPIO_PIN_15
#define SW3_GPIO_Port GPIOC
#define L0_Pin GPIO_PIN_0
#define L0_GPIO_Port GPIOA
#define L1_Pin GPIO_PIN_1
#define L1_GPIO_Port GPIOA
#define L2_Pin GPIO_PIN_2
#define L2_GPIO_Port GPIOA
#define L3_Pin GPIO_PIN_3
#define L3_GPIO_Port GPIOA
#define L4_Pin GPIO_PIN_4
#define L4_GPIO_Port GPIOA
#define L5_Pin GPIO_PIN_5
#define L5_GPIO_Port GPIOA
#define L6_Pin GPIO_PIN_6
#define L6_GPIO_Port GPIOA
#define L7_Pin GPIO_PIN_7
#define L7_GPIO_Port GPIOA
#define D4_Pin GPIO_PIN_12
#define D4_GPIO_Port GPIOB
#define D3_Pin GPIO_PIN_13
#define D3_GPIO_Port GPIOB
#define D2_Pin GPIO_PIN_14
#define D2_GPIO_Port GPIOB
#define D1_Pin GPIO_PIN_15
#define D1_GPIO_Port GPIOB
#define LED_POWER_Pin GPIO_PIN_8
#define LED_POWER_GPIO_Port GPIOA
// Vetor com os pinos dos LEDs
uint16_t leds[] = {
GPIO_PIN_0,
GPIO_PIN_1,
GPIO_PIN_2,
GPIO_PIN_3,
GPIO_PIN_4,
GPIO_PIN_5,
GPIO_PIN_6,
GPIO_PIN_7
};
#define NUM_LEDS 8
/* Private function prototypes */
void SystemClock_Config(void);
void RCC_SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler();
void SysTick_Handler(void)
{
static uint16_t cont = 0;
static uint8_t i = 0;
HAL_IncTick();
cont++;
if (cont > 199) {
cont = 0;
HAL_GPIO_WritePin(GPIOA, 0xFF, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, leds[i], GPIO_PIN_SET);
i++;
if (i>7) i=0;
//HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/****** inserir seu código aqui *******/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,0);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,1);
while (true)
for (int i = 0; i < NUM_LEDS; i++)
{
// Apaga todos os LEDs
HAL_GPIO_WritePin(GPIOA, 0xFF, GPIO_PIN_RESET);
// Liga apenas o LED atual
HAL_GPIO_WritePin(GPIOA, leds[i], GPIO_PIN_SET);
HAL_Delay(200); // Delay de 200 ms
// }
return 0;
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {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.PL
00LSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PL
00LMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&R
00CC_OscInitStruct) != HAL_OK)
{
00
Error_Handler();
00
}
00
/** 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();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 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(GPIOA, L0_Pin|L1_Pin|L2_Pin|L3_Pin
|L4_Pin|L5_Pin|L6_Pin|L7_Pin
|LED_POWER_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, D4_Pin|D3_Pin|D2_Pin|D1_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : SW1_Pin SW2_Pin SW3_Pin */
GPIO_InitStruct.Pin = SW1_Pin|SW2_Pin|SW3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : L0_Pin L1_Pin L2_Pin L3_Pin
L4_Pin L5_Pin L6_Pin L7_Pin
LED_POWER_Pin */
GPIO_InitStruct.Pin = L0_Pin|L1_Pin|L2_Pin|L3_Pin
|L4_Pin|L5_Pin|L6_Pin|L7_Pin
|LED_POWER_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);
/*Configure GPIO pins : D4_Pin D3_Pin D2_Pin D1_Pin */
GPIO_InitStruct.Pin = D4_Pin|D3_Pin|D2_Pin|D1_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);
}
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)
{
}
}
Loading
stm32-bluepill
stm32-bluepill