文章目录
- 一、开发板介绍
- 二、程序实现
- 1.配置函数
- 2.程序源码
- main.c
- LED.c
- LED.h
- 总结
前言
今天我们开始来学习一下STM32F103Z8T6 点灯。这块芯片可用的IO口资源十分丰富,可用的通用IO口为32个(注意:是在使用ST_LINK 和 J_LINK的情况下)。这块芯片的操作方法与正点原子的stm32开发板的操作方法大致相同,但是在应用和价格层面上,还这款的芯片的单片机更香,平时做一些小型项目是绰绰有余的。
一、开发板介绍
我这里采用的开发板是这一款,其实开发板功能都大致相同的。该款开发板有5V 和 3.3V的供电IO口,支持USART、ST_LINK、J_LINK下载程序。
这里开发板上的两个LED,只有LED2可以控制,因为这里的LED作为开发板的电源指示灯。
二、程序实现
1.配置函数
我们要了解这里的控制LED灯,就是通过改变LED灯连接的IO口的输出电平,从而来达到让LED灯 亮/灭的状态,这里我们就要了解如何配置IO口。
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); // I/O口初始化
typedef struct
{
uint16_t GPIO_Pin; // 要使用IO口 管脚号
GPIOSpeed_TypeDef GPIO_Speed; // IO口 的传输速度
GPIOMode_TypeDef GPIO_Mode; // IO口 的模式
}GPIO_InitTypeDef;
// GPIO_Pin:IO口 管脚号
#define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */
#define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */
#define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */
#define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */
#define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */
#define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */
#define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */
#define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */
#define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */
#define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */
#define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */
#define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */
#define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */
#define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */
#define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */
#define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */
#define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */
// GPIO_Speed:IO口 传输速度
typedef enum
{
GPIO_Speed_10MHz = 1, // 10MHZ
GPIO_Speed_2MHz, // 2MHZ
GPIO_Speed_50MHz // 50MHZ
}GPIOSpeed_TypeDef;
// GPIO_Mode:IO口模式
typedef enum
{ GPIO_Mode_AIN = 0x0, // 模拟输入
GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入
GPIO_Mode_IPD = 0x28, // 下拉输入
GPIO_Mode_IPU = 0x48, // 上拉输入
GPIO_Mode_Out_OD = 0x14, // 开漏输出
GPIO_Mode_Out_PP = 0x10, // 推挽输出
GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出
GPIO_Mode_AF_PP = 0x18 // 复用推挽输出
}GPIOMode_TypeDef;
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); //外设时钟初始化
该开发板的LED灯管脚号为PC13,所以这里我们初始化:RCC_APB2Periph_GPIOC
#define RCC_APB2Periph_AFIO ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8 ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1 ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3 ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15 ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9 ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10 ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11 ((uint32_t)0x00200000)
2.程序源码
main.c
#include "led.h"
#include "delay.h"
void Device_Init(void) //初始化 外设
{
delay_init(); //延时函数初始化
LED_Pin_Confog(); //配置 LED管脚
}
int main(void)
{
Device_Init(); //初始化 外设
while(1)
{
LED1 = 0; //LED:亮
delay_ms(1000);
LED1 = 1; //LED:灭
delay_ms(1000);
}
}
LED.c
#include "led.h"
void LED_Pin_Confog(void) //配置 LED管脚
{
GPIO_InitTypeDef LED_Pin;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
LED_Pin.GPIO_Mode = GPIO_Mode_Out_PP; //模式:推挽输出
LED_Pin.GPIO_Pin = GPIO_Pin_13; //管脚号:13脚
LED_Pin.GPIO_Speed = GPIO_Speed_50MHz; //速度:50MHZ
GPIO_Init(GPIOC,&LED_Pin);
GPIO_SetBits(GPIOC,GPIO_Pin_13); //IO口输出:高电平(初始化状态:灯灭)
}
LED.h
#ifndef __led_h
#define __led_h
#include "stm32f10x.h"
#define LED1 PCout(13)
void LED_Pin_Confog(void); //配置 LED管脚
#endif
注意:这里调用库函数的时候,尽量使用他为提供的宏定义 参数,否则会报枚举错误的 waring,希望大家避免该错误。文章来源:https://www.toymoban.com/news/detail-447401.html
总结
以上就是STM32F103C8T6点灯教程,今天的分享就到这里,如有不足还望大家见谅!!!文章来源地址https://www.toymoban.com/news/detail-447401.html
到了这里,关于STM32F103C8T6 点亮LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!