[应用相关] 利用STM32F103C8T6最小系统板点亮流水灯

[复制链接]
1647|34
 楼主| 丢丢手绢666 发表于 2022-6-30 19:11 | 显示全部楼层 |阅读模式
后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器、继电器等都会使用的。

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

评论

———————————————— 版权声明:本文为CSDN博主「海盐冰梨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_30888681/article/details/112267535  发表于 2022-6-30 19:12
 楼主| 丢丢手绢666 发表于 2022-6-30 19:13 | 显示全部楼层
学习目标

STM32F103C8T6最小系统板的使用
面包板搭建流水灯电路的方法
将STM32F103RCT6工程模板修改为STM32F103C8T6的工程模板
熟悉STM32 单片机GPIO作为输出的使用方法
 楼主| 丢丢手绢666 发表于 2022-6-30 19:13 | 显示全部楼层
STM32F103C8T6芯片简介
根据STM32&STM8产品型号命名规则(参考:STM32单片机最小系统详解)可知:
STM32F103C8T6这个命名中:

STM32代表STM32家族,32位MCU;
F代表产品类型为基础型;
103代表特定功能为STM32基础型;
C代表引脚数为48&49引脚;
8代表内存容量为64KB;
T代表封装为QFP;
6代表温度范围为-40到+85℃。
 楼主| 丢丢手绢666 发表于 2022-6-30 19:14 | 显示全部楼层
核心板原理图
3206062bd8588caa69.png
 楼主| 丢丢手绢666 发表于 2022-6-30 19:14 | 显示全部楼层
通过原理图我们可知:

板子供电有两种方式:
通过U3 USB-micro接口提供5V供电,然后经过板载的LDO芯片转为VCC3V3;
通过P2 接口,即SWD下载接口中的VCC3V3给核心板供电。
 楼主| 丢丢手绢666 发表于 2022-6-30 19:38 | 显示全部楼层
核心板上有两个LED,其中一个为电源指示灯PWR,另外一个LED与PC13引脚相连,当PC13置高时,LED灭;当PC13置低时,LED亮;
核心板上的跳线是为了选择启动模式使用。我们为了让程序以主闪存存储器作为启动区域,需要将BOOT0置低,BOOT1随意,此种启动模式是最常用的用户FLASH启动,为默认启动模式;
核心板上的按键为RESET复位按键;
P2接口为SWD下载模式对应的引脚接口;
 楼主| 丢丢手绢666 发表于 2022-6-30 19:39 | 显示全部楼层
搭建流水灯电路
准备元器件
8524762bd8b6215852.png
 楼主| 丢丢手绢666 发表于 2022-6-30 19:40 | 显示全部楼层
注意:
电阻使用的是2K,作为限流使用;
LED注意正负极,直插发光二极管,引脚长的为正极,短的为负极;如果引脚被剪过了,一样长了,查看发光二极管管体内部金属极大小,金属极较小的是正极,大的片状的是负极。
 楼主| 丢丢手绢666 发表于 2022-6-30 19:41 | 显示全部楼层
搭建电路
按照如下原理图搭建电路
8336262bd8bc9e34c8.png
 楼主| 丢丢手绢666 发表于 2022-6-30 19:42 | 显示全部楼层
搭建完毕效果图
5608262bd8bfaa4ed4.png
 楼主| 丢丢手绢666 发表于 2022-6-30 19:42 | 显示全部楼层
修改工程模板
在基于STM32固件库的MDK5工程建立基础上,将STM32F103RCT6工程模板修改为STM32F103C8T6的工程模板。修改点:

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

 楼主| 丢丢手绢666 发表于 2022-6-30 21:00 | 显示全部楼层
 楼主| 丢丢手绢666 发表于 2022-6-30 21:01 | 显示全部楼层
修改全局宏定义,将STM32F10X_HD修改为STM32F10X_MD。
 楼主| 丢丢手绢666 发表于 2022-6-30 21:02 | 显示全部楼层
 楼主| 丢丢手绢666 发表于 2022-6-30 21:06 | 显示全部楼层
更改使用的芯片型号
7215462bd9f18bdf78.png
 楼主| 丢丢手绢666 发表于 2022-6-30 21:07 | 显示全部楼层
设置下载的Flash容量
5771462bd9fc5bd239.png
 楼主| 丢丢手绢666 发表于 2022-6-30 21:07 | 显示全部楼层
注意:
网上说STM32F103C8T6和STM32F103CBT6 是在同一圆晶上制造的,但测试时,只测试手册提供的参数范围所包含的内容,也就意味着 STM32F103C8T6也是128k Flash,只不过只测试了前面64k,然后打上 STM32F103C8T6标注(当然内部就写上 C8T6 的 ID);所以我们在添加Flash的时候,只能找到128K的STM32F103,而找不到64K的Flash。
 楼主| 丢丢手绢666 发表于 2022-6-30 21:08 | 显示全部楼层
代码实现
设置PA5、PA6、PA7为输出

  1. GPIO_InitTypeDef  GPIO_InitStructure;   
  2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     
  3. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  4. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  5. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  6. GPIO_Init(GPIOA, &GPIO_InitStructure);
 楼主| 丢丢手绢666 发表于 2022-6-30 21:09 | 显示全部楼层
初始化GPIO为高电平,高电平的时候,LED灭

  1. GPIO_SetBits(GPIOA,GPIO_Pin_5);   
  2. GPIO_SetBits(GPIOA,GPIO_Pin_6);
  3. GPIO_SetBits(GPIOA,GPIO_Pin_7);
 楼主| 丢丢手绢666 发表于 2022-6-30 21:10 | 显示全部楼层
流水灯代码具体实现
  1. #include "stm32f10x.h"  

  2. void Delay(u32 count)  
  3. {   
  4.         u32 i=0;   
  5.         for(;i<count;i++);  
  6. }

  7. int main(void)  
  8. {   
  9.         GPIO_InitTypeDef  GPIO_InitStructure;   
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.         
  16.         GPIO_SetBits(GPIOA,GPIO_Pin_5);   
  17.         GPIO_SetBits(GPIOA,GPIO_Pin_6);
  18.         GPIO_SetBits(GPIOA,GPIO_Pin_7);
  19.         
  20.         while(1)
  21.         {
  22.                 GPIO_ResetBits(GPIOA,GPIO_Pin_5);
  23.                 GPIO_SetBits(GPIOA,GPIO_Pin_6);  
  24.                 GPIO_SetBits(GPIOA,GPIO_Pin_7);                 
  25.                 Delay(1000000);Delay(1000000);Delay(1000000);
  26.                 GPIO_SetBits(GPIOA,GPIO_Pin_5);
  27.                 GPIO_ResetBits(GPIOA,GPIO_Pin_6);  
  28.                 GPIO_SetBits(GPIOA,GPIO_Pin_7);
  29.                 Delay(1000000);Delay(1000000);Delay(1000000);
  30.                 GPIO_SetBits(GPIOA,GPIO_Pin_5);
  31.                 GPIO_SetBits(GPIOA,GPIO_Pin_6);  
  32.                 GPIO_ResetBits(GPIOA,GPIO_Pin_7);
  33.                 Delay(1000000);Delay(1000000);Delay(1000000);
  34.         }  
  35. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

476

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部