Você está na página 1de 50

Machine Translated by Google

Rotina da placa principal STM32F103C8

Manual Experimental

Recomenda-se prestar atenção à nossa conta oficial para atualizações

Notas de lançamento:

Versão data Descrição do conteúdo

V1.0 2020/07/04 primeiro lançamento

v2.0 2021/10/27 Atualização do modelo de documento

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,

Diagrama esquemático, informações do chip e um conjunto completo de ferramentas de software.

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,

Modo de captura de entrada do temporizador, modo codificador do temporizador, aquisição ADC.


Machine Translated by Google

Índice
preâmbulo ................................................ . .................................................. .......... 2

1. Nova construção........................................ ........ ........................................... 6

1.1 Preparação de novas construções e documentos relacionados......................................... ......... ................................... 6

1.2 Adicionar biblioteca oficial e configurações de arquivo HEX................................... ....... ............ 10

1.3 Adicionar bibliotecas delay, sys e usart................................... ....... ...26

1.4 Configurar ambiente de chinês simplificado........................................ .......... ........................... 31

2. Ligue o LED.......................................... .... ............................................... ..33

2.1 Introdução ao IO relacionado......................................... .......... .................................... 33

2.2 Criar um arquivo de função da biblioteca de periféricos de hardware e adicioná-lo ao projeto................................... . ..... 33

2.3 Escrevendo funções de biblioteca de periféricos de hardware................................... ......... ........................... 39

2.4 Visualizar definição de função, declaração e variáveis de entrada................................... ...... .... 43

2.5 Escreva a função principal............................................. .................................................. .49

2.6 Carregar o programa para a placa principal STM32F103C8T6......................................... .. ...50

2.7 Ideia e efeito de realização......................................... .......... ...................................... 54

2.8 Pontos de conhecimento nesta seção......................................... ......... ........................................ 55

3. LED de controle do botão.......................................... ........................................ 56

3.1 Introdução ao IO relacionado......................................... .......... ........................................ 56

3.2 Renomear o projeto................................... ........... ...................................... 56

3.3 Escrevendo funções de biblioteca de periféricos de hardware......................... ......... ....................... 59

3.4 Escreva a função principal............................................. .................................................. .61

3.5 Ideia e efeito de realização......................................... .......... ...................................... 62

3.6 Pontos de conhecimento nesta seção......................................... ......... ........................................ 62

4. Comunicação por porta serial............................................. ....................................63

4.1 Introdução ao IO relacionado......................................... .......... ...................................... 63

4.2 Preparativos.................................................. .................................................. .63

4.3 Função de inicialização da comunicação da porta serial 1 de gravação................................... ....... ............ 64


Machine Translated by Google

4.4 Função de interrupção da comunicação serial 1 de gravação................................... ........ ........................ 66

4.5 Escreva a função principal............................................. .................................................. .68

4.6 Ideia de implementação, uso de software assistente de depuração de porta serial e efeito do programa... 68

4.7 Pontos de conhecimento nesta seção......................................... ......... ........................................ 70

5. INTERRUPÇÃO EXTERNA............................................. .... ............................................... ...72

5.1 Introdução ao IO relacionado......................................... .......... .................................... 72

5.2 Criar projeto e arquivo de biblioteca de interrupção externa................................... ....... ............ 72

5.3 Escrevendo funções de biblioteca de interrupção externa.......................... ......... ........................................ 73

5.4 Escreva a função principal............................................. .................................................. ....76

5.5 Ideia e efeito de realização......................................... .......... ........................... 76

5.6 Pontos de conhecimento nesta seção......................................... ......... ........................................ 77

6. Interrupção de temporização............................................. .. ................................................ 78

6.1 Introdução ao IO relacionado......................................... .......... .................................... 78

6.2 Criar projeto e arquivo de biblioteca de interrupção temporizada................................... ....... ............ 78

6.3 Função da biblioteca de interrupção temporizada de gravação.................................... ....... ........................................... ..... 78

6.4 Escreva a função principal............................................. .................................................. .81

6.5 Ideia e efeito de realização......................................... .......... .................................... 82

6.6 Pontos de conhecimento nesta seção......................................... ......... ........................................ 82

7. Modo de saída PWM do temporizador......................................... ......... ........................... 83

7.1 Introdução ao IO relacionado......................................... .......... .................................... 83

7.2 Escrevendo funções da biblioteca de saída PWM............................ ....... ...................................83

7.3 Escreva a função principal............................................. .................................................. .87

7.4 Ideia e efeito de realização............................................. ... ................................... 88

7.5 Pontos de conhecimento nesta seção......................................... ......... ........................................ 88

8. Saída PWM para controlar o servo.......................... ........ ........................... 89

8.1 Introdução ao IO relacionado......................................... .......... .................................... 89

8.2 Modificando funções da biblioteca PWM......................................... .......... ......................90

8.3 Escrevendo a função principal............................................. .................................................. .90


Machine Translated by Google

8.4 Ideia e efeito de realização......................................... .......... ........................... 92

8.5 Pontos de conhecimento nesta seção......................................... ......... ........................................ 92

9. Modo de captura de entrada do temporizador.......................... ......... ........................................93

9.1 Introdução ao IO relacionado......................................... .......... .................................... 93

9.2 Escrevendo funções da biblioteca de captura de entrada do temporizador.......................... ........ ........... 93

9.3 Escreva a função principal............................................. .................................................. ....99

9.4 Ideia e efeito de realização............................................. ... ................................... 99

9.5 Pontos de conhecimento nesta seção......................................... ......... ........................................ 100

10. Modo Codificador do Temporizador......................................... ......... ...........................101

10.1 Introdução ao IO relacionado......................................... .......... .................................... 101

10.2 Escrevendo funções da biblioteca do codificador............................................. ...... ........................................... .... 101

10.3 Escreva a função principal............................................. ...... ........................................... .... 105

10.4 Ideias e efeitos de experimentos......................................... .......... ........................... 105

10.5 Pontos de conhecimento nesta seção......................................... ......... ........................... 107

11. Aquisição da ADC......................................... .. ................................................ ...108

11.1 Introdução ao IO relacionado......................................... .......... .................................... 108

11.2 Escrever função de biblioteca de aquisição ADC......................... ......... ........................ 108

11.3 Escreva a função principal............................................. .................................................. ....112

11.4 Ideias e efeitos de experimentos......................................... .......... .........................113

11.5 Pontos de conhecimento nesta seção......................................... ......... ...........................113


Machine Translated by Google

1. Nova construção

1.1 Preparação de novas construções e documentos relacionados

1 Crie um projeto e pastas associadas

Crie uma nova pasta [NewProject] para salvar o arquivo da biblioteca do projeto, e ao mesmo tempo na pasta

Crie uma pasta [USER] em [NewProject].

Figura 1-1-1 Criar pasta

Após abrir o software Keil5, clique em [Projeto] e selecione [Novo Projeto uVision]

Figura 1-1-2 Novo projeto

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.

Arquivo, o nome do arquivo é [NewProject], clique em [Salvar].

Figura 1-1-3 Salve o projeto [NewProject] na pasta [USER]

2 Selecione o chip de engenharia

Selecione a CPU, ou seja, o modelo do chip STM para fazer upload do programa, aqui está o chip desta rotina

STM32F103C8T6 como exemplo,

STMicroelectronicsÿSTM32F1SeriesÿSTM32F103ÿSTM32F103C8, clique em [OK].

Figura 1-1-4 Selecione o modelo do chip

Página 7 de 114
Machine Translated by Google

Clique em ÿCancelarÿ.

Figura 1-1-5 Clique em Cancelar

3 Copie os arquivos da biblioteca relacionados

Crie três novas pastas na pasta [NewProject] [CORE], [OBJ],

[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

Coloque os arquivos de código-fonte da função de biblioteca fornecidos oficialmente pelo STM.

Figura 1-1-6 Crie uma nova pasta

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]

Dentro está o arquivo de cabeçalho .h e [src] é o arquivo de origem .c.

Figura 1-1-7 Copiar arquivos

Copie os arquivos [core_cm3.c], [core_cm3.h], [startup_stm32f10x_hd.s] para o arquivo

Na pasta [CORE], você pode copiar diretamente para o modelo de projeto que fornecemos. Entre eles, [core_cm3.c] e

[core_cm3.h] são os arquivos principais, e [startup_stm32f10x_hd.s] é o arquivo de inicialização, e o arquivo de inicialização

Além de [startup_stm32f10x_hd.s], também existem [startup_stm32f10x_ld.s] e

[startup_stm32f10x_md.s], os três são aplicáveis a chips STM32 com capacidades diferentes.

[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ÿ

é adequado para chips com grande capacidade (256KÿFLASH size).

Página 9 de 114
Machine Translated by Google

Figura 1-1-8 Copiar arquivos

Copie os arquivos [main.c], [stm32f10x.h], [stm32f10x_conf.h], [stm32f10x_it.c], [stm32f10x_it.h],

[system_stm32f10x.c], [system_stm32f10x.h] para a pasta

ÿUSUÁRIOÿPróximo.

Figura 1-1-9 Copiar arquivos

1.2 Adicionar biblioteca oficial e configurações de arquivo HEX

1 Novo agrupamento de arquivos de projeto

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

Figura 1-2-1 Selecione o gerente do projeto

Página 11 de 114
Machine Translated by Google

Na coluna [Project Targets], renomearemos [Target1] para [NewProject], e depois em

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]

Olhos [USUÁRIO], [CORE], [STM32F10x_FWLib].

Figura 1-2-2 Crie um novo grupo [USER], [CORE], [STM32F10x_FWLib]

Figura 1-2-3 Efeito de grupo

Página 12 de 114
Machine Translated by Google

2 Adicione arquivos de biblioteca ao grupo [USER]

Clique com o botão direito em [NovoProjeto] e selecione [Gerenciar Itens do Projeto].

Figura 1-2-4 Selecione o gerente do projeto

Após selecionar Grupos [USER], clique em [Adicionar Arquivos].

Figura 1-2-5 Adicionar arquivos ao grupo [USER]

Página 13 de 114
Machine Translated by Google

Selecione [main.c], [stm32f10x_it.c], [system_stm32f10x.c] na pasta [USER],

Clique em [Adicionar] e depois em [Fechar]. Você pode ver que os Grupos [USER] adicionaram com sucesso 3

arquivos.

Figura 1-2-6 Adicionar arquivo de origem (arquivo .c)

Figura 1-2-7 Grupo USER após adicionar arquivos

Página 14 de 114
Machine Translated by Google

3 Adicione arquivos de biblioteca ao grupo [CORE]

Após selecionar Grupos [CORE], clique em [Adicionar Arquivos].

Figura 1-2-8 Adicionar arquivos ao grupo [CORE]

Clique em [1] para retornar à pasta anterior, clique duas vezes na pasta [CORE], clique em [2],

Selecione ÿTodos os arquivos (*.*)ÿ.

Figura 1-2-9 Voltar ao nível anterior

Página 15 de 114
Machine Translated by Google

Figura 1-2-10 Clique para entrar na pasta [CORE]

Figura 1-2-11 Selecione o tipo de arquivo reconhecível

Página 16 de 114
Machine Translated by Google

Selecione os arquivos [core_cm3.c], [core_cm3.h] e [startup_stm32f10x_hd.s] (startup

De acordo com o tamanho do chip FLASH, selecione hd, ld ou md), clique em [Adicionar] e, em seguida, clique em

ÿFecharÿ.

Figura 1-2-12 Adicionar arquivo de origem (arquivo .c)

4 Adicione arquivos de biblioteca ao grupo [STM32F10x_FWLib]

Após selecionar Grupos [STM32F10x_FWLib], clique em [Adicionar Arquivos].

Figura 1-2-13 Adicionar arquivos ao grupo [STM32F10x_FWLib]

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

Clique na pasta [src].

Figura 1-2-14 Retornar à pasta anterior

Figura 1-2-15 Clique para entrar na pasta [STM32F10x_FWLib]

Página 18 de 114
Machine Translated by Google

Figura 1-2-16 Clique para entrar na pasta [src]

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

O ruim é que o projeto é muito grande e a velocidade de compilação é lenta.

Figura 1-2-17 Adicionar arquivo de origem (arquivo .c)

Página 19 de 114
Machine Translated by Google

Clique OK].

Figura 1-2-18 Clique em OK para confirmar a adição dos arquivos de origem

5 Edite o caminho de geração do arquivo HEX

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]

Pasta para objetos...ÿÿ

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

Figura 1-2-20 Selecione a pasta [OBJ] na pasta [NewProject], clique em OK

Figura 1-2-21 Clique em OK

Página 21 de 114
Machine Translated by Google

6 Adicione o caminho do arquivo de cabeçalho

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-22 Há um erro

Clique em [Varinha Mágica], clique em [C/C++], clique em 3 lugares [...].

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.

Figura 1-2-24 Configuração do caminho do arquivo de cabeçalho do sistema (arquivo .h)

Respectivamente no caminho [NewProject\USER], ÿNovoProjeto\COREÿ ÿ

Em [NewProject\STM32F10x_FWLib\inc], clique em [Selecionar pasta] para definir o caminho do arquivo de

cabeçalho do sistema (arquivo .h).

Figura 1-2-25 Selecione a pasta ÿUSERÿ

Figura 1-2-26 Selecione a pasta [CORE]

Página 23 de 114
Machine Translated by Google

Figura 1-2-27 Selecione a pasta [STM32F10x_FWLib]

Adicione o arquivo de cabeçalho e defina o caminho com sucesso, clique em [OK].

Figura 1-2-28 Confirme o caminho do arquivo de cabeçalho do sistema (arquivo .h)

Página 24 de 114
Machine Translated by Google

7 Adicione definição de macro e teste de compilação

Digite "STM32F10X_MD, USE_STDPERIPH_DRIVER" em ÿDefinirÿ para adicionar

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

Mude para [STM32F10X_LD].

Figura 1-2-29 Adicionar definição de macro

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

Haverá um aviso, que pertence ao BUG de Keil.

Figura 1-2-30 Nenhum erro relatado

Página 25 de 114
Machine Translated by Google

1.3 Adicionar bibliotecas delay, sys e usart

1 Adicione o arquivo [.C]

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

diretamente para o modelo de projeto fornecido por nós.

copie abaixo do quadro.

[delay] contém a função de atraso empacotada e [sys] contém a função de controle de porta IO empacotada.

[usart] contém as funções de uso da porta serial encapsuladas.

Figura 1-3-1 Copiar e colar funções de biblioteca preparadas

Em seguida, adicione os arquivos .c relevantes ao projeto. Clique com o botão direito em [NovoProjeto], selecione [Gerenciar

Itens do projetoÿÿ

Figura 1-3-2 Selecione o gerente do projeto

Página 26 de 114
Machine Translated by Google

Crie um novo [SYSTEM] em [Groups], selecione [SYSTEM] e clique em [Add Files].

Figura 1-3-3 Adicionar arquivos ao grupo [SYSTEM]

No caminho [NewProject\SYSTEM\delay], clique em [Adicionar].

Figura 1-3-4 Adicionar arquivo de origem (arquivo .c)

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-5 Adicionar arquivos de origem [sys.c], [usart.c]

2 Adicione o caminho do arquivo de cabeçalho correspondente

Clique em [Varinha Mágica], clique em [C/C++], clique em 3 lugares ÿ...ÿ.

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

Clique em 1 e depois clique em 2 [...].

Figura 1-3-7 Configuração do caminho do arquivo de cabeçalho do sistema (arquivo .h)

Vá para a pasta [delay] na pasta [SYSTEM], clique em [Select Folder],

O caminho onde o arquivo de cabeçalho [delay.h] está localizado é adicionado ao projeto.

Figura 1-3-8 Selecione a pasta [atraso]

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

Junte-se ao projeto. Clique OK. Clique em [OK] novamente.

Página 29 de 114
Machine Translated by Google

Figura 1-3-9 Continue adicionando o caminho da pasta [sys], [usart]

Figura 1-3-10 Clique em OK

Página 30 de 114
Machine Translated by Google

1.4 Configurar ambiente de chinês simplificado

Em seguida, clique em [Editar] e depois em [Configurar].

Figura 1-4-1 Selecione a configuração

Selecione [Chinês GB2312 (simplificado)] em [Codificação] e clique em [OK]. aqui

É para evitar caracteres ilegíveis nos comentários chineses.

Figura 1-4-2 Selecione [Cinese GB2312 (Simplificado)] e confirme

Página 31 de 114
Machine Translated by Google

Clique em [Salvar tudo] em um lugar e o novo projeto será concluído.

Figura 1-4-3 Clique em 1 para salvar todos os arquivos

Página 32 de 114
Machine Translated by Google

2. Ligue o LED

2.1 Introdução ao IO relacionado

Há uma luz LED controlável no Forest S1, que é uma luz LED azul controlada pelo pino PA4.

Acende quando nível baixo.

Figura 2-1-1 Diagrama de fiação do pino da luz LED azul

2.2 Crie um arquivo de função da biblioteca de periféricos de hardware e adicione-o ao projeto

Para tornar a especificação e a programação de engenharia convenientes, um bom hábito é construir

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.

1Crie uma pasta

Primeiro crie uma nova pasta [HARDWARE] na pasta [NewProject] para armazenar

funções da biblioteca de software.

Figura 2-2-1 Crie uma nova pasta

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

operação não é mais exibida).

Figura 2-2-2 Crie um novo grupo [HARDWARE]

3 Crie um arquivo de biblioteca

Clique em 1 [Novo arquivo], clique em 2 [Salvar arquivo].

Figura 2-2-3 Crie um novo arquivo

Página 34 de 114
Machine Translated by Google

Figura 2-2-4 Clique para salvar o arquivo

Na pasta [HARDWARE], o nome do arquivo é [LED.h], clique em [Salvar].

Figura 2-2-5 Salve o arquivoÿLED.hÿ

Página 35 de 114
Machine Translated by Google

Repita os passos semelhantes aos anteriores, [Novo Arquivo], [Salvar Arquivo], na pasta [HARDWARE]

O nome do arquivo salvo é ÿLED.cÿ.

Figura 2-2-6 Crie e salve o arquivoÿLED.cÿ

4 Adicione arquivos de biblioteca ao grupo

Clique com o botão direito em [HARDWARE], clique em [Adicionar arquivos existentes ao grupo “HARDWARE”...]

Figura 2-2-7 Adicionar arquivos ao grupo [HARDWARE]

Página 36 de 114
Machine Translated by Google

Selecione o arquivo [LED.c] na pasta [HARDWARE] e clique em [Adicionar].

Figura 2-2-8 Adicionar arquivo de origem (arquivo .c)

5 Adicione o caminho do arquivo de cabeçalho

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.

Figura 2-2-10 Configuração do caminho do arquivo de cabeçalho do sistema (arquivo .h)

Na pasta [HARDWARE], clique em [Selecionar pasta]. Em seguida, clique em [OK],

Clique em [OK] novamente.

Figura 2-2-11 Selecione a pastaÿHARDWAREÿ

Página 38 de 114
Machine Translated by Google

Figura 2-2-12 Clique em OK

2.3 Escrever funções de biblioteca de periféricos de hardware

1 LED.h

Figura 2-3-1 LED.h

Página 39 de 114
Machine Translated by Google

Observe que a parte sombreada em cinza do texto é o procedimento.

#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

Protótipo de função de gravação intermediária.

2 LED.c

Figura 2-3-2 LED.c

#include "led.h"

#include "stm32f10x_gpio.h"

//Definição da função de inicialização de

hardware LED void LED_Init(void)

GPIO_InitTypeDef GPIO_InitStructure; //Define uma estrutura de inicialização de pinos


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //Habilita relógio GPIOA,
GPIOA é montado no relógio APB2 e o relógio correspondente deve ser habilitado antes de usar a porta IO no STM32

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //ÿÿ 4

Página 40 de 114
Machine Translated by Google

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //O modo de entrada e saída do pino é o modo


de saída
push-pull GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //A velocidade de saída do pino é
50MHZ GPIO_Init(GPIOA, &GPIO_InitStructure); //Inicializar de acordo com os
parâmetros GPIO_InitStructure definidos acima do Pin GPIOA_PIN4

GPIO_SetBits(GPIOA, GPIO_Pin_4); //Inicializa o pino GPIOA4 em alto nível


}

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.

Finalmente chame-o na função principal.

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:

Figura 2-3-5 GPIO_Pin

Página 42 de 114
Machine Translated by Google

(3) GPIO_Mode possui 8 opções (ou seja, 8 modos de funcionamento do GPIO):

GPIO_Mode_AIN entrada analógica;

Entrada flutuante GPIO_Mode_IN_FLOATING;

GPIO_Mode_IPD entrada suspensa;

GPIO_Mode_IPU entrada pull-up;

GPIO_Mode_Out_OD saída de drenagem aberta;

GPIO_Mode_Out_PP saída push-pull;

GPIO_Mode_AF_OD saída multiplexada de dreno aberto;

GPIO_Mode_AF_PP Saída push-pull multiplexada.

Figura 2-3-6 GPIO_Mode

(4) GPIO_Speed tem 3 opções, GPIO_Speed_2MHz , GPIO_Speed_10MHz ,

GPIO_Speed_50MHz, indica a frequência mais alta da porta de saída, quando a porta GPIO está definida como entrada, não

Defina esta opção.

Figura 2-3-7 GPIO_Speed

2.4 Ver definição de função, declaração e variáveis de entrada

À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

Outras opções, etc., então podemos fazer isso:

Página 43 de 114
Machine Translated by Google

1 Veja a definição e declaração da função

Tome a função RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); como

Por exemplo, primeiro colocamos o ponteiro do mouse sobre o nome da função.

Figura 2-4-1 Coloque o ponteiro do mouse sobre o nome da função

Clique com o botão direito e selecione ÿIr para a definição de 'xxxx'ÿ.

Figura 2-4-2 Selecione ÿIr para definição de 'xxxx'ÿ

Página 44 de 114
Machine Translated by Google

Ou seja, salte automaticamente para a definição da função.

Figura 2-4-3 Definição da função RCC_APB2PeriphClockCmd

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).

Figura 2-4-4 Selecione ÿIr para referência para 'xxxx'ÿ

Página 45 de 114
Machine Translated by Google

Figura 2-4-5 Declaração de função de RCC_APB2PeriphClockCmd

2 Visualize variáveis de entrada e membros da estrutura

Com a função RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

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.

Figura 2-4-6 Coloque o ponteiro do mouse no nome da variável

Página 46 de 114
Machine Translated by Google

Clique com o botão direito e selecione ÿIr para a definição de 'xxxx'ÿ.

Figura 2-4-7 Selecione ÿIr para definição de 'xxxx'ÿ

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

é montado no relógio APB2, a primeira entrada da função RCC_APB2PeriphClockCmd torna-se

O volume pode ser os nomes desses clocks e, em seguida, puxar para baixo para ver outros clocks montados sob o clock APB1.

Figura 2-4-8 Nome do relógio de função montado no relógio APB2

Página 47 de 114
Machine Translated by Google

Figura 2-4-9 Nome do relógio da função montado no relógio APB1

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

Figura 2-4-11 Valores possíveis de GPIO_InitStructure.GPIO_Mode

2.5 Escreva a função principal

Figura 2-5-1 Função principal

#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.

No final, apenas as funções colocadas na função principal serão executadas.

int principal(void) {

LED_Init(); //Chama a função LED de inicialização, você pode usar delay_init() após referenciar "led.h"; //Chama

a função de atraso de inicialização, você pode usá-la após referenciar "delay.h"

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

Função de inicialização do LED LED_Init(); para inicializar.

enquanto(1) {

GPIO_SetBits(GPIOA, GPIO_Pin_4); //GPIOA_PIN4 saída de alto nível, LED apagado,

Pode ser usado após referenciar "stm32f10x_gpio.h"

//PAout(4)=1; //Após referenciar o arquivo de cabeçalho sys.h, você pode usar diretamente esta definição de macro para operar

IO(GPIOA_PIN4) para gerar delay_ms(1000) de

alto nível; //Atraso por 1 segundo, pode ser usado após referenciar "delay.h"

usar

GPIO_ResetBits(GPIOA, GPIO_Pin_4); //Configura o pino A4 para nível baixo, acende, conduz

Depois de usar "stm32f10x.h", ele pode ser usado

//PAout(4)=0; //Após referenciar o arquivo de cabeçalho sys.h, você pode usar diretamente esta definição de macro para operar

IO(GPIOA_PIN4) para gerar delay_ms(1000) de

baixo nível; //Atraso por 1 segundo, pode ser usado após referenciar "delay.h"

usar

}}

2.6 Carregue o programa para a placa principal STM32F103C8T6

Conecte a placa principal STM32F103C8T6 ao computador com um cabo de dados USB.

Página 50 de 114

Você também pode gostar