Escolar Documentos
Profissional Documentos
Cultura Documentos
Manual Experimental
Notas de lançamento:
URL: www.wheeltec.net
Machine Translated by Google
preâmbulo
Este manual de experimento é um tutorial introdutório ao microcomputador de chip único STM32, desde acender a luz LED até ler o ADC, um passo de cada vez
Ele orienta todos a aprender passo a passo, e cada rotina fala sobre uma função bastante prática, que é a base da maioria dos itens.
Uma função que deve ser utilizada em todos os projetos. Este manual de experimento é baseado no chip STM32F103C8T6, fornecendo um conjunto completo de código-fonte,
Existem 11 seções neste manual de experimento, que são nova construção, iluminação LED, LED de controle de botão, porta serial
Comunicação, interrupção externa, interrupção de temporização, modo de saída PWM do temporizador, servo de controle de saída PWM,
Índice
preâmbulo ................................................ . .................................................. .......... 2
2.2 Criar um arquivo de função da biblioteca de periféricos de hardware e adicioná-lo ao projeto................................... . ..... 33
4.6 Ideia de implementação, uso de software assistente de depuração de porta serial e efeito do programa... 68
1. Nova construção
Crie uma nova pasta [NewProject] para salvar o arquivo da biblioteca do projeto, e ao mesmo tempo na pasta
Após abrir o software Keil5, clique em [Projeto] e selecione [Novo Projeto uVision]
Página 6 de 114
Machine Translated by Google
Crie um arquivo de projeto na pasta [USER] na pasta [NewProject] recém-criada na primeira etapa.
Selecione a CPU, ou seja, o modelo do chip STM para fazer upload do programa, aqui está o chip desta rotina
Página 7 de 114
Machine Translated by Google
Clique em ÿCancelarÿ.
[STM32F10x_FWLib], a pasta [CORE] é usada para armazenar arquivos principais e arquivos de inicialização, [OBJ]
É usado para armazenar os arquivos do processo de compilação e arquivos hexadecimais, e a pasta [STM32F10x_FWLi] é usada para armazenar
Página 8 de 114
Machine Translated by Google
Copie as pastas [inc] e [src] para a pasta [STM32F10x_FWLib], você pode diretamente
Copie-o no modelo de projeto fornecido por nós. [inc] e [src] são pacotes oficiais da biblioteca de firmware, entre os quais [inc]
Na pasta [CORE], você pode copiar diretamente para o modelo de projeto que fornecemos. Entre eles, [core_cm3.c] e
[startup_stm32f10x_ld.s] Adequado para chips com pequena capacidade (tamanho FLASH ÿ 32K),
[startup_stm32f10x_md.s] é adequado para chips com capacidade média (64KÿFLASH sizeÿ128K) e ÿstartup_stm32f10x_ld.sÿ
Página 9 de 114
Machine Translated by Google
ÿUSUÁRIOÿPróximo.
Copiamos os arquivos necessários relacionados à biblioteca de firmware para o diretório do projeto, mas
Esses arquivos também devem ser adicionados ao projeto antes de serem usados. Clique com o botão direito em [Target1] e selecione [Gerenciar
Itens do projetoÿÿ
Página 10 de 114
Machine Translated by Google
Página 11 de 114
Machine Translated by Google
Exclua [Source Group1] da coluna [Groups] e crie três grupos: [USER], [CORE],
[STM32F10x_FWLib]. Clique OK. Você pode ver que existem mais três subitens em [NovoProjeto]
Página 12 de 114
Machine Translated by Google
Página 13 de 114
Machine Translated by Google
Clique em [Adicionar] e depois em [Fechar]. Você pode ver que os Grupos [USER] adicionaram com sucesso 3
arquivos.
Página 14 de 114
Machine Translated by Google
Clique em [1] para retornar à pasta anterior, clique duas vezes na pasta [CORE], clique em [2],
Página 15 de 114
Machine Translated by Google
Página 16 de 114
Machine Translated by Google
De acordo com o tamanho do chip FLASH, selecione hd, ld ou md), clique em [Adicionar] e, em seguida, clique em
ÿFecharÿ.
Página 17 de 114
Machine Translated by Google
Clique em [1] para retornar à pasta anterior, clique duas vezes na pasta [STM32F10x_FWLib], clique duas vezes
Página 18 de 114
Machine Translated by Google
Selecione todos os arquivos nesta pasta, clique em [Adicionar] e depois clique em [Fechar]. a pasta
A seguir está o arquivo da biblioteca de periféricos, se usarmos apenas um dos periféricos, não poderemos adicionar os não utilizados
Os arquivos da biblioteca dos periféricos. Por exemplo, se você usar apenas GPIO, poderá adicionar apenas stm32f10x_gpio.c e outros
Você não precisa adicioná-lo. Aqui adicionamos todos eles por conveniência posteriormente, em vez de adicioná-los sempre, então
Página 19 de 114
Machine Translated by Google
Clique OK].
Em seguida, selecione o caminho de armazenamento do arquivo HEX, que é usado para fazer upload para o chip STM32
arquivo (o caminho de armazenamento padrão do arquivo HEX é a pasta [Objects] na pasta [USER]).
Clique na [Varinha Mágica] em 1, clique em [Saída], marque [Criar Arquivo HEX] e clique em [Selecionar]
Selecione a pasta [OBJ] na pasta [NewProject] como o caminho para salvar o arquivo HEX,
Clique OK.
Figura 1-2-19 Confirme para gerar o arquivo HEX e selecione o caminho para salvar o arquivo HEX
Página 20 de 114
Machine Translated by Google
Página 21 de 114
Machine Translated by Google
Em seguida, você precisa adicionar o caminho onde o arquivo de cabeçalho está localizado, caso contrário, um erro será relatado quando você clicar em [Build] em 1, como 2
lugar. Deve-se observar que todos os arquivos de cabeçalho utilizados devem adicionar seu caminho ao projeto.
Figura 1-2-23 Escolha adicionar o caminho onde o arquivo de cabeçalho do sistema (arquivo .h) está localizado
Página 22 de 114
Machine Translated by Google
1 clique, 2 cliques.
Página 23 de 114
Machine Translated by Google
Página 24 de 114
Machine Translated by Google
Adicione a definição de macro e clique em [OK]. Observe que [STM32F10X_HD] corresponde a grande capacidade: 256Kÿ
Chip STM de FLASH. Para capacidade média deve ser alterado para [STM32F10X_MD], para capacidade pequena deve ser
Neste momento, clique em [Reconstruir tudo] em um local e isso mostra que a operação foi bem-sucedida, sem erros, sem avisos. Perceber
A última linha em main.c deve ser uma linha em branco, e a última linha de todos os programas criados no futuro deve ser uma linha em branco, caso contrário
Página 25 de 114
Machine Translated by Google
Após as etapas acima, o projeto está basicamente concluído. Em seguida, adicionaremos algumas funções de biblioteca para conveniência futura.
Programação. Crie uma nova pasta [SYSTEM] na pasta [NewProject], copie as pastas [delay], [sys] e [usart] para a pasta [SYSTEM], e você poderá ir
[delay] contém a função de atraso empacotada e [sys] contém a função de controle de porta IO empacotada.
Em seguida, adicione os arquivos .c relevantes ao projeto. Clique com o botão direito em [NovoProjeto], selecione [Gerenciar
Itens do projetoÿÿ
Página 26 de 114
Machine Translated by Google
Página 27 de 114
Machine Translated by Google
Repita os passos semelhantes aos anteriores e copie o arquivo [sys.c] e a pasta [usart] na pasta [sys]
Os seguintes arquivos [usart.c] são adicionados aos Grupos [SYSTEM]. Clique OK].
Figura 1-3-6 Escolha adicionar o caminho onde o arquivo de cabeçalho do sistema (arquivo .h) está localizado
Página 28 de 114
Machine Translated by Google
Repita as etapas semelhantes às duas etapas anteriores e adicione os caminhos onde os arquivos de cabeçalho [sys.h] e [usart.h] estão localizados
Página 29 de 114
Machine Translated by Google
Página 30 de 114
Machine Translated by Google
Página 31 de 114
Machine Translated by Google
Página 32 de 114
Machine Translated by Google
2. Ligue o LED
Há uma luz LED controlável no Forest S1, que é uma luz LED azul controlada pelo pino PA4.
Função de biblioteca Li. A seguir, com base no projeto criado na seção anterior, criaremos uma função de biblioteca para luzes LED
número.
Primeiro crie uma nova pasta [HARDWARE] na pasta [NewProject] para armazenar
Página 33 de 114
Machine Translated by Google
2Criar grupos
Clique com o botão direito em [NovoProjeto], selecione [Gerenciar Itens do Projeto], crie um novo Grupo
[HARDWARE], clique em [OK]. (Para economizar espaço, o capítulo [Novo Projeto] demonstrou
Página 34 de 114
Machine Translated by Google
Página 35 de 114
Machine Translated by Google
Repita os passos semelhantes aos anteriores, [Novo Arquivo], [Salvar Arquivo], na pasta [HARDWARE]
Clique com o botão direito em [HARDWARE], clique em [Adicionar arquivos existentes ao grupo “HARDWARE”...]
Página 36 de 114
Machine Translated by Google
Em seguida, adicione o caminho onde o arquivo de cabeçalho LED.h está localizado ao projeto. As regras antigas, [Varinha Mágica] ÿ [C/C++]
ÿÿ...ÿÿ
Figura 2-2-9 Escolha adicionar o caminho onde o arquivo de cabeçalho do sistema (arquivo .h) está localizado
Página 37 de 114
Machine Translated by Google
1 clique, 2 cliques.
Página 38 de 114
Machine Translated by Google
1 LED.h
Página 39 de 114
Machine Translated by Google
#ifndef __LED_H //Use junto com #endif para evitar referências repetidas a arquivos de cabeçalho e melhorar a eficiência da
compilação #define __LED_H //Se nenhum arquivo de cabeçalho for referenciado, insira a seguinte definição
void LED_Init(void); //Define o protótipo da função (declaração da função), o arquivo de cabeçalho geral (arquivo .h) é o protótipo da
função e o arquivo .c é a definição da função. Esta função é a função de inicialização do hardware do LED
#endif //A definição está completa ou o arquivo de cabeçalho é referenciado para chegar a esta etapa
Os arquivos .h são chamados de arquivos de cabeçalho, #ifndef, #define e #endif são usados juntos, em #define e #endif
2 LED.c
#include "led.h"
#include "stm32f10x_gpio.h"
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //ÿÿ 4
Página 40 de 114
Machine Translated by Google
O arquivo .c é chamado de arquivo de origem e as definições de função geralmente são escritas aqui, como funções de inicialização, funções de função, etc.
O início do arquivo .c da função da biblioteca de periféricos de hardware deve referir-se ao arquivo de cabeçalho correspondente, como LED.c para luzes LED
O arquivo de cabeçalho LED.h é referenciado no início. Já que a função LED_Init() usa a função da biblioteca oficial STM32
parte GPIO, então o início também deve se referir à função da biblioteca oficial STM32: #include
"stm32f10x_gpio.h" ÿ
(1) Cada GPIO e função tem um nome de relógio correspondente, alguns são montados no relógio APB1 e outros são montados no relógio APB1
No relógio APB2,:
Figura 2-3-3 O nome do relógio correspondente a cada pino e função montado no relógio APB1
Página 41 de 114
Machine Translated by Google
Figura 2-3-4 O nome do relógio correspondente a cada pino e função montado no relógio APB2
(2) GPIO_Pin possui 17 opções, correspondendo aos pinos 0-15 de um GPIO e aos pinos de um GPIO
Todos os pinos:
Página 42 de 114
Machine Translated by Google
GPIO_Speed_50MHz, indica a frequência mais alta da porta de saída, quando a porta GPIO está definida como entrada, não
Às vezes queremos saber a função da função, a definição da função, o significado da variável de entrada, a variável de entrada
Página 43 de 114
Machine Translated by Google
Página 44 de 114
Machine Translated by Google
Se [Ir para referência para 'xxxx'] for selecionado após clicar com o botão direito, vá para a declaração da função (função
protótipo de número).
Página 45 de 114
Machine Translated by Google
Tomemos RCC_APB2Periph_GPIOA como exemplo para visualizar a variável de entrada da função, primeiro colocamos o ponteiro do mouse na variável
No nome da quantidade.
Página 46 de 114
Machine Translated by Google
Ou seja, ele salta automaticamente para a definição da variável, e você pode ver os nomes dos relógios com outras funções próximas, e todas elas
O volume pode ser os nomes desses clocks e, em seguida, puxar para baixo para ver outros clocks montados sob o clock APB1.
Página 47 de 114
Machine Translated by Google
Ou seja, através de [Go To Definition Of 'xxxx'] podemos visualizar outras possíveis variáveis de entrada da função
valor.
Os valores possíveis dos membros da estrutura também podem ser obtidos clicando com o botão direito na variável do membro da estrutura e selecionando
Selecione ÿIr para definição de 'xxxx'ÿ para visualizar, como GPIO_InitStructure.GPIO_Mode pode
Valor funcional: clique com o botão direito em [GPIO_Mode_Out_PP] e selecione [Ir para definição de
'xxxx'ÿÿ
Figura 2-4-10 Clique com o botão direito em [GPIO_Mode_Out_PP] e selecione [Ir para definição de 'xxxx']
Página 48 de 114
Machine Translated by Google
#include "stm32f10x_gpio.h"
#include "led.h"
#include "atraso.h"
#include "sys.h"
Página 49 de 114
Machine Translated by Google
Como são utilizadas as funções das três bibliotecas stm32f10x_gpio.h, led.h e delay.h , elas devem ser
citar.
int principal(void) {
LED_Init(); //Chama a função LED de inicialização, você pode usar delay_init() após referenciar "led.h"; //Chama
Antes de usar algumas funções, a inicialização correspondente deve ser realizada, como a função de atraso a ser usada a seguir,
Então é necessário chamar a função delay_init(); para inicializar; depois para controlar os periféricos do LED, depois chamar
enquanto(1) {
//PAout(4)=1; //Após referenciar o arquivo de cabeçalho sys.h, você pode usar diretamente esta definição de macro para operar
alto nível; //Atraso por 1 segundo, pode ser usado após referenciar "delay.h"
usar
//PAout(4)=0; //Após referenciar o arquivo de cabeçalho sys.h, você pode usar diretamente esta definição de macro para operar
baixo nível; //Atraso por 1 segundo, pode ser usado após referenciar "delay.h"
usar
}}
Página 50 de 114