STM32F103C8T6 点亮LED灯

这篇具有很好参考价值的文章主要介绍了STM32F103C8T6 点亮LED灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 一、开发板介绍
  • 二、程序实现
  • 1.配置函数
  • 2.程序源码
  • main.c
  • LED.c
  • LED.h
  • 总结​​​​​​​

前言

        今天我们开始来学习一下STM32F103Z8T6 点灯。这块芯片可用的IO口资源十分丰富,可用的通用IO口为32个(注意:是在使用ST_LINK 和 J_LINK的情况下)。这块芯片的操作方法与正点原子的stm32开发板的操作方法大致相同,但是在应用和价格层面上,还这款的芯片的单片机更香,平时做一些小型项目是绰绰有余的。


一、开发板介绍

STM32F103C8T6 点亮LED灯

STM32F103C8T6 点亮LED灯

        我这里采用的开发板是这一款,其实开发板功能都大致相同的。该款开发板有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,希望大家避免该错误。

总结

以上就是STM32F103C8T6点灯教程,今天的分享就到这里,如有不足还望大家见谅!!!文章来源地址https://www.toymoban.com/news/detail-447401.html

到了这里,关于STM32F103C8T6 点亮LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stm32f103c8t6(proteus仿真)学习——3.按键控制LED灯

    按键:button 电阻:res 先配置LED灯的GPIO 编写LED亮灭的函数 实现按下按键LED灯的状态取反 led.c总代码 先配置按键的GPIO 获取当前按键键值的函数 key.c总代码 5.1 按键按下实现LED亮或者灭 仿真效果图: 5.2 按键按下实现LED状态取反 仿真效果图: 百度网盘 链接:https://pan.baidu.co

    2024年02月07日
    浏览(60)
  • STM32CubeIDE + HAL + STM32f103C8T6 系列教程1 ---板载PC13LED闪烁

    之前的系列教程都是基于Arduino的,但是公司招聘51和stm32的开发还是多些,所以特别开了一个stm32的系列。 这个系列特点是注重了 Arduino 编程思维和习惯下向STM32开发的过渡 。前期没有涉及到太多寄存器相关的知识,利用HAL库和STM32CubeIDE快速入手STM32的数字输入/输出、模拟输

    2024年02月16日
    浏览(44)
  • STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

    今日继续学习使用  STM32 F103C8T6开发板 点亮一个LED灯,文章提供源码,测试工程,实验效果图,希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 : 引脚安排整理: 定时器的引脚例举: 串口的引脚例举:  CAN串口通信: SPI通信: IIC通信:  其余引脚: 烧录引脚:

    2024年02月11日
    浏览(51)
  • STM32F103C8T6定时器实现led的周期闪烁及PWM实现流水灯

    通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。 使用TIM3和TIM4,分别输

    2024年01月23日
    浏览(57)
  • STM32F103C8T6板子介绍

    STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。  STM32F103C8T6 F1XX片上资源

    2024年02月11日
    浏览(57)
  • 舵机控制(STM32F103C8T6)

            本文是以 STM32F103C8T6 作为主控芯片,通过PB6端口输出PWM,实现控制180°舵机。 (一)概述         舵机是一种位置伺服驱动器器,是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只在控制信号持续不变,伺服机构就

    2023年04月09日
    浏览(56)
  • 功耗测评 | STM32F103C8T6

    STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,外接丰富的传感器、功能模块、通信模块、显示存储等可以形成各种可样的产品项目应用。对于功耗要求比较高的产品,一般会选择STM32L系列的MCU,但是从功耗的评测角度,逻辑上是基本相似的。 在很多应用场合中都对

    2024年02月07日
    浏览(45)
  • STM32F103C8T6系统板

    1.电源部分 2.复位 3.晶振 4. 电源电路——防反接 有关二极管 漫谈二极管防电源反接电路 本次采用上图右下角的NMOS防反接电路。 电源电路——电源芯片 AMS1117是AMS公司的 ,LM1117是NS(美国国家半导体)的,LM1117要贵很多,所以一般的用AMS1117就可以了。 (以下分析参考STM32F10

    2024年02月02日
    浏览(72)
  • STM32F103C8T6串口通信

      首先来看一下需要操作的函数,以及配置的步骤: 图1                                                  图2   Code: usart.c #include \\\"usart.h\\\" void ustart_Init(void ) { GPIO_InitTypeDef GPIO_Init_Ustar ; // 定义输出端口TX的结构体对象 USART_InitTypeDef USTART_Init; // 定义串口初始化结构体对象

    2024年02月16日
    浏览(52)
  • STM32F103C8T6串口调试篇

    项目开发中,当出现bug时,由于不知道某个变量的值,所以很难定位问题,针对此问题,串口调试脱颖而出。通过串口printf()实时将需要显示的信息打印出来,这样就很方便的定位问题。 串口设置方法 1.购买调试器pwlink2。参考STM32F103C8T6程序烧录方法_stm32f103c8t6如何烧录_流

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包