Introdução ao chip STM32F030
O chip STM32F030 é um microcontrolador ARM Cortex-M0 de 32 bits e baixo custo da STMicroelectronics. Possui até 32 KB de Flash e 4 KB de SRAM e pode funcionar a até 48 MHz. Inclui uma variedade de periféricos, como comparadores analógicos, temporizadores e interfaces I2C e SPI. O STM32F030 também suporta aplicações de controle de motores e possui uma ampla gama de periféricos analógicos e digitais integrados. O tamanho reduzido e o baixo consumo de energia do chip o tornam ideal para uso em uma variedade de aplicações, desde eletrônicos de consumo até sistemas médicos e industriais. O preço e o desempenho do chip tornam o STM32F030 uma ótima escolha para desenvolvedores preocupados com os custos. Com suporte para uma variedade de ferramentas de desenvolvimento, incluindo STM32Cube e a ferramenta de configuração gráfica STM32CubeMX, é fácil começar a usar o STM32F030 e desenvolver aplicações inovadoras.

Parâmetros
– CPU: núcleo ARM Cortex-M0 com
arquitetura RISC de 32 bits – Frequência de operação: até 48 MHz
– Memória de programa: até 32 KB Flash
– RAM: até 4
KB – Fonte de clock: interna de 8 MHz ou externa de
32 kHz – Saída de clock: 2 x 32 kHz
– E/S digital: até 36 pinos de
E/S – Entradas analógicas: Até 8 canais ADC de
12 bits – Temporizadores: até 3 temporizadores de
16 bits – Interfaces de comunicação: até 2 I2C, 2 USART, SPI, CAN
Arquitetura do sistema
A estrutura interna do sistema STM32F030 pode ser dividida simplesmente em 2 sistemas mestre e 4 sistemas escravo. Os conceitos de mestre e escravo aqui são relativos à Busmatrix:
- Mestres
- Núcleo Cortex-M0 Barramento AHB
- GP-DMA
- Escravos
- SRAM interna
- Flash interno
- AHB2APB
- AHB para portas GPIO
A relação entre 2 mestres e 4 escravos é mostrada na figura a seguir com mais detalhes e marcada:

Para a ponte AHB2APB, se você deseja usar os periféricos conectados ao barramento APB, deve primeiro chamar um registro como RCC_AHBENR para habilitar o clock do periférico, e o periférico é o driver do periférico. Esses detalhes geralmente são tratados na API do driver ST.
Visão geral da memória
No programa STM32F030, os dados, registros e portas IO são todos mapeados para o espaço de endereço de 4 GB (máquina de 32 bits). O mapa de memória do STM32F030 está detalhado na ficha técnica.
SRAM
A SRAM do STM32F030 tem um tamanho de 8 KB e pode ser acessada em unidades de byte, palavra e meia palavra. Esta seção é usada para armazenar o código compilado e vinculado, os dados e a pilha do programa durante o tempo de execução. Os dados são constantemente lidos ou gravados nesta SRAM durante a execução do programa.
Flash
O flash interno do STM32F030 é geralmente suficiente para uso, pois foi projetado para essa finalidade. Ele tem 64 KB de espaço flash para o usuário. O flash dentro do chip é conhecido como flash interno ou ROM (a ROM e o flash diferem no fato de que a ROM não pode ser apagada pelo usuário e é fixada durante a produção do chip, enquanto o flash pode ser apagado e reescrito a qualquer momento).
O flash interno do STM32F030 é dividido em dois tipos:
- 64 KB de espaço flash do usuário: usado para baixar o código .bin gerado pela compilação e vinculação do usuário.
- Flash de informações: inclui bytes de opção e memória do sistema.
Os bytes de opção podem ser usados para configurar algumas funções do IC. A
memória do sistema é a memória do IC, que contém um segmento de código fixado durante a produção do IC que não é de código aberto e cuja operação só pode ser adivinhada. O objetivo da memória do sistema é atuar como um bootloader embutido. Geralmente, ela não é usada para depuração. O uso típico é conectar um depurador por meio de uma interface SWD ao IC e baixar e depurar facilmente o código. No entanto, para produtos, a interface SWD pode não estar exposta. Nesse caso, o código .bin do produto pode ser baixado e executado através do bootloader da memória interna do sistema do IC por meio de uma interface serial, que é o processo típico para atualizações de firmware. A STM fornecerá a interface e a demonstração de uso do bootloader da memória do sistema, e há muitas documentações relacionadas explicando como usá-lo.
Configuração de inicialização
A depuração através do SWD é chamada de "programação do sistema", enquanto o carregamento e a inicialização de programas usando um bootloader são considerados "programação de aplicativos". A STM possui três modos de inicialização configuráveis para diferentes cenários de aplicação.
Configuração do modo de inicialização:
Primeiramente, há um pino de inicialização que se conecta a níveis altos ou baixos. Quando o chip é inicializado, ele verifica o nível do pino de inicialização e muda para o modo de inicialização correspondente. Além disso, nBOOT1 pode ser configurado no byte de opção para selecionar o modo de inicialização correspondente.
Classificação dos modos de inicialização:
Existem três tipos: inicialização flash do usuário, que é a mais comum; após compilar e vincular, baixe o código, reinicie e execute seu próprio código flash. Inicialização da memória do sistema, que usa o bootloader interno do IC para inicializar. Inicialização SRAM.
Moldura do relógio
A estrutura do relógio do STM32F030 é a seguinte, e aqui estão algumas definições delas:
- HSI: chamado relógio interno de alta velocidade, é composto por um oscilador RC.
- HSE: chamado de relógio externo de alta velocidade, pode ser conectado a um ressonador externo de quartzo/cerâmica ou a uma fonte de relógio externa.
- LSI: chamado de relógio interno de baixa velocidade, composto por um oscilador RC, tem uma frequência baixa, e o STM32F030 é de 40 kHz.
- LSE: chamado de relógio externo de baixa velocidade, geralmente conectado a um cristal de quartzo com uma frequência externa de 32,768 kHz.
- PLL: é a saída multiplicadora do loop de fase bloqueada.
- HSI14 RC: fonte de clock que pode ser usada apenas para ADC.

Os periféricos que não são especificamente indicados geralmente utilizam PCLK. Aqui está uma breve lista das situações que precisam ser ativadas com AHB/APB de acordo com o código específico:
- Use AHB como fonte de clock: GPIOA-F, TS, CRC, FLITF, SRAM, DMA1.
- Use APB1 como fonte de clock: TIM2, TIM3, TIM6, TIM14, WWDG, SPI2, USART2, I2C1, I2C2, PWR, DAC, CEC.
- Use APB2 como fonte de clock: SYSCFG, ADC1, TIM1, SPI1, USART1, TIM15, TIM16, TIM17, DBGMCU.
Função de reinicialização
A reinicialização é uma parte crucial do processo de inicialização do sistema MCU. Quando o IC começa a executar o programa, ele começa pela reinicialização, que é a primeira etapa após o sistema ser ligado.
Mecanismo de reinicialização do Cortex-M0
No arquivo de inicialização do Cortex-M0, você sempre verá o reset_handler, que está localizado na primeira posição da tabela vetorial. O endereço do Cortex-M0 é 0x0000 0004, e o valor do PC quando o Cortex-M0 começa a funcionar é esse endereço. No reset_handler, geralmente é chamada a função SystemInit implementada pelo usuário, que configura o relógio dos vários componentes necessários para que o sistema funcione corretamente, facilitando o funcionamento normal do sistema posteriormente. Em seguida, é chamada a entrada __main na biblioteca, que deve realizar algum processamento inicial da biblioteca de tempo de execução C e configurar a pilha.
Tipos de reinicialização
Existem três tipos principais de reinicialização para o STM32F030: reinicialização de energia, reinicialização do sistema e reinicialização do domínio RTC.
A reinicialização de energia está relacionada à fonte de alimentação do IC. Essa reinicialização é acionada pela ativação da energia e pelo despertar do modo de espera, e a inicialização do sistema começa após a reinicialização.
A reinicialização do sistema é acionada pelo sistema. Ou seja, a fonte de alimentação está normal, mas se o botão de reinicialização for pressionado, o registro correspondente for reinicializado pelo software ou o Watchdog for acionado, essa reinicialização ocorrerá. Quando essa reinicialização ocorre, a única diferença em relação à reinicialização de energia é que o bit relevante no registro RCC_CSR usado para indicar a fonte de reinicialização não será reinicializado, enquanto todos os outros registros serão reinicializados para o estado imediatamente após a inicialização.
O acionador da reinicialização do domínio RTC também é um acionador de software. Ele é acionado pela gravação no bit correspondente no registro RCC_BDCR. No entanto, esse tipo de reinicialização afeta apenas o RTC e o cristal LSE, etc.
Ciclo de aperfeiçoamento contínuo
CRC, a Verificação de Redundância Cíclica, é um algoritmo de verificação que verifica a integridade dos dados transmitidos/armazenados. Como pode ser usado em muitos lugares, o STM32F030 implementa esse algoritmo com uma unidade de computação de hardware CRC no IC. Quando um aplicativo precisa usar o CRC, a unidade de hardware pode ser controlada por software para atender aos requisitos (é claro que o CRC também pode ser implementado em software, mas a velocidade definitivamente não é tão rápida quanto a do CRC de hardware).

O processo CRC é implementado dentro do IC, portanto, você só precisa saber como usá-lo, e ele é muito simples de usar. Escreva os dados de origem que precisam ser calculados no registro de dados (entrada), inicie o cálculo da unidade de cálculo CRC e, em seguida, leia os resultados calculados no registro de dados (saída).
Na verdade, a entrada e a saída do registro de dados CRC do STM32F030 usam o mesmo registro, porque ele deve ser inserido primeiro e, em seguida, a saída pode ser obtida antes de continuar para a próxima entrada. Pode-se observar nesse processo que a entrada e a saída não são usadas ao mesmo tempo, portanto, você pode usar diretamente um registro para multiplexar as duas funções. O registro pode ser operado em 32 bits, 16 bits e 8 bits, o que pode atender a diferentes requisitos.
Placa de desenvolvimento STM32F030 - STM32f0308 Discovery
O desenvolvimento deste microcontrolador STM32F030 baseia-se na mais recente biblioteca HAL da STM32, no código de inicialização gerado pelo STM32CubeMX e no seu compilador GCC. Abaixo encontra-se o seu esquema, diagrama pcb e placa montada. O STM32 oferece muitas placas de desenvolvimento básicas, como as séries Discovery e Nucleo. A stm32f0308 discovery é uma das placas da série Discovery, equipada com o chip STM32F030.
As funções e características básicas das placas de desenvolvimento da série Discovery são semelhantes, mas as capacidades dos chips que as acompanham podem variar. As características do stm32f0308 discovery são as seguintes:
Extensão conveniente da porta IO: Com apenas um cabo USB conectado a um PC, o desenvolvimento pode ser realizado. As portas IO do chip STM32F030 na placa de desenvolvimento são estendidas, facilitando a conexão com diferentes dispositivos usando fios DuPont.
Interface de depuração: A placa de desenvolvimento vem com uma interface de depuração SWD integrada, que é implementada usando outro chip Cortex-M3 da ST (atualmente, a versão v9 do JLINK no mercado também deve estar usando o chip Cortex-M3 da ST). Essa interface de depuração SWD pode ser usada separadamente através da conexão de um jumper cap, o que significa que o stm32f0308-discovery pode ser usado como um depurador SWD autônomo.
Fonte de alimentação flexível: A placa de desenvolvimento em si é alimentada por USB, mas possui um circuito de conversão de tensão que pode fornecer fontes de alimentação de 5V e 3V para uso em dispositivos externos (observe que a corrente da fonte de alimentação ainda é limitada). Geralmente, pequenos módulos e interfaces podem ser alimentados diretamente por ela.
Periféricos no nível da placa: Por ser uma placa de desenvolvimento básica e de baixo custo, os periféricos integrados são muito simples, consistindo em dois botões e quatro LEDs. Dos dois botões, um é usado para reinicialização e o outro é um botão programável pelo usuário. Dos quatro LEDs, um é um indicador de energia, outro é um indicador de status de depuração SWD e os dois restantes podem ser programados para controle. Portanto, na realidade, os periféricos integrados que podem ser programados para controle são apenas um botão do usuário e dois LEDs do usuário.
Desempenho
- Interface SWD reservada para depuração por ST-LINK;
- Interface PA4 (saída DAC) com alta capacidade de acionamento de porta;
- Dois botões sensíveis ao toque e 3 LEDs para facilitar a depuração;
- Interface LCD1602 e uma interface compatível com LCD TFT comum;
- Use um supercapacitor como fonte de alimentação de backup RTC;
- Interface USB com proteção de energia;
- Vários pontos de teste de alimentação para osciloscópio ou multímetro.




