栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32F103C8T6实现流水灯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32F103C8T6实现流水灯

STM32F103C8T6实现流水灯

目录
    • STM32F103C8T6实现流水灯
      • 一、实验原理
      • 二、c语言实现
      • 三、总结
      • 四、参考
      • 五、附件

一、实验原理

1.1 stm32f103c8t6介绍
STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。
1.2 stm32f103c8t6点亮流水灯原理
详细原理参考博客:https://blog.csdn.net/geek_monkey/article/details/86291377.

二、c语言实现

1.项目创建
选择STM32F103C8,后面选择startup和core
2.点击魔法棒,在output里选择create hex file

3.在source group里创建led.c,并写入代码

//--------------APB2使能时钟寄存器------------------------
#define RCC_AP2ENR	*((unsigned volatile int*)0x40021018)
	//----------------GPIOA配置寄存器 ------------------------
#define GPIOA_CRL	*((unsigned volatile int*)0x40010800)
#define	GPIOA_ORD	*((unsigned volatile int*)0x4001080C)
//----------------GPIOB配置寄存器 ------------------------
#define GPIOB_CRH	*((unsigned volatile int*)0x40010C04)
#define	GPIOB_ORD	*((unsigned volatile int*)0x40010C0C)
//----------------GPIOC配置寄存器 ------------------------
#define GPIOC_CRH	*((unsigned volatile int*)0x40011004)
#define	GPIOC_ORD	*((unsigned volatile int*)0x4001100C)
//-------------------简单的延时函数-----------------------
void  Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<800;i++);
}
void A_LED_LIGHT(){
	GPIOA_ORD=0x0<<7;		//PA7低电平
	GPIOB_ORD=0x1<<9;		//PB9高电平
	GPIOC_ORD=0x1<<15;		//PC15高电平
}
void B_LED_LIGHT(){
	GPIOA_ORD=0x1<<7;		//PA7高电平
	GPIOB_ORD=0x0<<9;		//PB9低电平
	GPIOC_ORD=0x1<<15;		//PC15高电平
}
void C_LED_LIGHT(){
	GPIOA_ORD=0x1<<7;		//PA7高电平
	GPIOB_ORD=0x1<<9;		//PB9高电平
	GPIOC_ORD=0x0<<15;		//PC15低电平	
}
//------------------------主函数--------------------------
int main()
{
	int j=100;
	RCC_AP2ENR|=1<<2;			//APB2-GPIOA外设时钟使能
	RCC_AP2ENR|=1<<3;			//APB2-GPIOB外设时钟使能	
	RCC_AP2ENR|=1<<4;			//APB2-GPIOC外设时钟使能
	//这两行代码可以合为 RCC_APB2ENR|=1<<3|1<<4;
	GPIOA_CRL&=0x0FFFFFFF;		//设置位 清零	
	GPIOA_CRL|=0x20000000;		//PA7推挽输出
	GPIOA_ORD|=1<<7;			//设置PA7初始灯为灭
	
	GPIOB_CRH&=0xFFFFFF0F;		//设置位 清零	
	GPIOB_CRH|=0x00000020;		//PB9推挽输出
	GPIOB_ORD|=1<<9;			//设置初始灯为灭
	
	GPIOC_CRH&=0x0FFFFFFF;		//设置位 清零
	GPIOC_CRH|=0x30000000;   	//PC15推挽输出
	GPIOC_ORD|=0x1<<15;			//设置初始灯为灭	
	while(j)
	{	
		A_LED_LIGHT();	
		Delay_ms(10000000);
		B_LED_LIGHT();
		Delay_ms(10000000);
		C_LED_LIGHT();
		Delay_ms(10000000);
	}
}

4.运行,再object文件下产生hex文件

5.烧录
将产生的hex文件通过flymcu烧录到板子里


6.运行结果

7.板子连接方式

GND — GND
3v3 — G
TXD — A10
RXD — A9
8.使用示波器显示三个GPIO端口的输出波形,先进入仿真调试
由下图可见,仿真图运行正常。

点击增加键,如果要增加A7引脚,就写入POTRA.7,然后就会出现图中的样子,同时记得把display type换为bit,其他引脚也像这样添加就行了。

三、总结

经过反复调试,终于把灯搞亮了,其中接线环节卡了我一下,程序环节也卡了我,这次实验比较有趣,也比较有成就感。

四、参考

链接: https://blog.csdn.net/junseven164/article/details/120804940?spm=1001.2014.3001.5501.
链接: https://blog.csdn.net/geek_monkey/article/details/86291377.

五、附件

链接: flycum下载
提取码:1111

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346892.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号