0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >设计应用 > 利用STM32F103C8T6最小系统板点亮流水灯

利用STM32F103C8T6最小系统板点亮流水灯

来源: zhihu
2021-12-07
类别:设计应用
eye 41
文章创建人 拍明

原标题:利用STM32F103C8T6最小系统板点亮流水灯

  后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器、继电器等都会使用的。

  流水灯相当于计算机语言中的“Hello World”,照着做一遍,实现了它,基本你就入门了。

  学习目标

  STM32F103C8T6最小系统板的使用

  面包板搭建流水灯电路的方法

  将STM32F103RCT6工程模板修改为STM32F103C8T6的工程模板

  熟悉STM32 单片机GPIO作为输出的使用方法

  STM32F103C8T6芯片简介

  根据STM32&STM8产品型号命名规则(参考:STM32单片机最小系统详解)可知:

  STM32F103C8T6这个命名中:

  STM32代表STM32家族,32位MCU;

  F代表产品类型为基础型;

  103代表特定功能为STM32基础型;

  C代表引脚数为48&49引脚;

  8代表内存容量为64KB;

  T代表封装为QFP;

  6代表温度范围为-40到+85℃。

  核心板原理图

  


  通过原理图我们可知:

  板子供电有两种方式:

  通过U3 USB-micro接口提供5V供电,然后经过板载的LDO芯片转为VCC3V3;

  通过P2 接口,即SWD下载接口中的VCC3V3给核心板供电。

  核心板上有两个LED,其中一个为电源指示灯PWR,另外一个LED与PC13引脚相连,当PC13置高时,LED灭;当PC13置低时,LED亮;

  核心板上的跳线是为了选择启动模式使用。我们为了让程序以主闪存存储器作为启动区域,需要将BOOT0置低,BOOT1随意,此种启动模式是最常用的用户FLASH启动,为默认启动模式;

  核心板上的按键为RESET复位按键;

  P2接口为SWD下载模式对应的引脚接口;

  搭建流水灯电路

  准备元器件

  


  注意:

  电阻使用的是2K,作为限流使用;

  LED注意正负极,直插发光二极管,引脚长的为正极,短的为负极;如果引脚被剪过了,一样长了,查看发光二极管管体内部金属极大小,金属极较小的是正极,大的片状的是负极。

  搭建电路

  按照如下原理图搭建电路

  


  搭建完毕效果图

  


  修改工程模板

  在基于STM32固件库的MDK5工程建立基础上,将STM32F103RCT6工程模板修改为STM32F103C8T6的工程模板。

  修改点:

  替换启动文件,将startup_stm32f10x_hd.s更换为startup_stm32f10x_md.s,startup_stm32f10x_md.s为中等容量产品使用的启动文件,对应FLASH的大小范围为:64K≤FLASH≤128K。

  


  修改全局宏定义,将STM32F10X_HD修改为STM32F10X_MD。

  


  更改使用的芯片型号

  


  设置下载的Flash容量

  


  注意:

  网上说STM32F103C8T6和STM32F103CBT6 是在同一圆晶上制造的,但测试时,只测试手册提供的参数范围所包含的内容,也就意味着 STM32F103C8T6也是128k Flash,只不过只测试了前面64k,然后打上 STM32F103C8T6标注(当然内部就写上 C8T6 的 ID);所以我们在添加Flash的时候,只能找到128K的STM32F103,而找不到64K的Flash。

  代码实现

  设置PA5、PA6、PA7为输出

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  初始化GPIO为高电平,高电平的时候,LED灭

  GPIO_SetBits(GPIOA,GPIO_Pin_5);

  GPIO_SetBits(GPIOA,GPIO_Pin_6);

  GPIO_SetBits(GPIOA,GPIO_Pin_7);

  流水灯代码具体实现

  #include "stm32f10x.h"

  void Delay(u32 count)

  {

  u32 i=0;

  for(;i<count;i++);< p="">

  }

  int main(void)

  {

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_SetBits(GPIOA,GPIO_Pin_5);

  GPIO_SetBits(GPIOA,GPIO_Pin_6);

  GPIO_SetBits(GPIOA,GPIO_Pin_7);

  while(1)

  {

  GPIO_ResetBits(GPIOA,GPIO_Pin_5);

  GPIO_SetBits(GPIOA,GPIO_Pin_6);

  GPIO_SetBits(GPIOA,GPIO_Pin_7);

  Delay(1000000);Delay(1000000);Delay(1000000);

  GPIO_SetBits(GPIOA,GPIO_Pin_5);

  GPIO_ResetBits(GPIOA,GPIO_Pin_6);

  GPIO_SetBits(GPIOA,GPIO_Pin_7);

  Delay(1000000);Delay(1000000);Delay(1000000);

  GPIO_SetBits(GPIOA,GPIO_Pin_5);

  GPIO_SetBits(GPIOA,GPIO_Pin_6);

  GPIO_ResetBits(GPIOA,GPIO_Pin_7);

  Delay(1000000);Delay(1000000);Delay(1000000);

  }

  }

  成果展示

  


  

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯