[STC32F12k54入门第一步]GPIO驱动(GPIO输出、GPIO输入、外部中断)

本文介绍了STC32F12k54单片机的GPIO驱动,包括GPIO输出、输入和外部中断的设置。通过详细的操作步骤,讲解了环境配置、ISP下载调试助手的使用以及Keil中软件包的添加。此外,还强调了大于32MHz频率下WTST指令的重要性。在GPIO部分,详细展示了在system.c和main.c中的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


STC出了一款60MHZ的32位单片机追风剑,博主刚好在群里面就提前购买了。用起来还不错,老规矩写一个教程出来。
全部包括内容:
1、GPIO驱动(GPIO输出、GPIO输入、外部中断)-----本章内容
2、Timer定时器。
3、USART+Modbus_RTU
4、ADC+串联分压
5、硬件SPI+OLED
6、硬件SPI+LCD
7、硬件I2C+INA229电流电压采样模块
8、PWM+A4988驱动步进电机
9、实战项目、没想好做什么
未完,待作者想内容

一、环境配置?

第一步
首先我们需要在官网下载最新版本的ISP下载调试助手。

//资料下载官网
www.STCAI.com

现在最新版本V6.91V
在这里插入图片描述

第二步
是添加STC32F12K54的软件包
在这里插入图片描述
然后选择我们的型号
在这里插入图片描述

然后选择你Keil的安装路径
在这里插入图片描述
再然后打开keil看下有没有我们的板子型号的软件包
这里显示的是STC32F12K64,我们使用的K54,但是选择这个也没有什么影响。
在这里插入图片描述
然后我们还要设置一下魔法棒
在这里插入图片描述
最后是输出文件设置
在这里插入图片描述
第三步程序烧录,我这里是使用USB烧录的,
烧录步骤:
按住P3.2不放,然后在按一下电源键。(方正和STC32G一样的)
最后就没有什么问题了

二、GPIO驱动

引脚的模式就去看我的STC32G入门第一篇,没啥好说的。
注意:STC32F要使用大于32MHZ的频率需要将WTST指令不能置“0”

system.h—>这个库主要是STC32F的引脚初始化、ms延时函数、初始配置

#ifndef __System_H
#define __System_H
#include <STC32G.H>
#include <String.h>
#define MAIN_Fosc		56000000L	//定义主时钟

typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int  u32;
#defien GPIO_PIN_RESET   0
#define GPIO_PIN_SET     1

GPIO_Init(void);
void delay_ms(unsigned int ms);

#endif

system.c

#include "System.h"


/*函数名:GPIO_Init(void)
*功能:STC32F初始化和引脚初始化
*形参:无
*返回值:无
*修改时间:2023/6/56
*作者:小夏
*/
void GPIO_Init(void){
		WTST = 1;  //设置程序指令延时参数,使用大于32MHZ不能将其置0
		EAXFR = 1; //扩展寄存器(XFR)访问使能
		CKCON = 0; //提高访问XRAM速度	
	  P1M1=0x00;     P1M0=0x00;
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
		P2SR = 0xff;   
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口	
}
/*函数名:delay_ms(unsigned int ms)
*功能:ms延时函数
*形参:ms 延时时间
*返回值:无
*修改时间:2023/6/56
*作者:小夏
*/
void delay_ms(unsigned int ms)
{
	unsigned int i;
	do{
		i = MAIN_Fosc / 6030;
		while(--i);
	}while(--ms);
}

1、GPIO输出

main.c

#include <STC32G.H>
#include "System.h"
/*函数名:main(void)
*功能:P3、P2进行闪烁
*形参:无
*返回值:无
*修改时间:2023/6/56
*作者:小夏
*/
int main(void){
	GPIO_Init(); //设置输入引脚为准双向口模式
	while(1){
		P3=0x00;
		P2=0x00;
		delay_ms(20);
		P3=0xff;
		P2=0xff; 
		delay_ms(20);
	}	
}

2、GPIO输入

main.c

#include <STC32G.H>
#include "System.h"



/*函数名:main(void)
*功能:读取P3.2的引脚让P2、P3引脚亮
*形参:无
*返回值:无
*修改时间:2023/6/56
*作者:小夏
*/
int main(void){
	GPIO_Init();
	while(1){
		if(P32==0){
				P2=0x00; //LED亮
				P3=0x00;
     while(P32==0);	
		}else if(P32==1){ 
			P2=0xff;
			P3=0xff;						
		}

	}		
}

3、引脚外部中断

main.c

#include <STC32G.H>
#include "System.h"


/*函数名:GPIO_NVIC(void)
*功能:GPIO的外部中断
*形参:无
*返回值:无
*修改时间:2023/6/56
*作者:小夏
*/
void GPIO_NVIC(void){
	P3IM0=0x00;
	P3IM1=0xff;
	P3INTE=0xff;
	EA=1;        //开启中断
}

/*函数名:main(void)
*功能:读取P3.2的引脚让P2、P3引脚亮
*形参:无
*返回值:无
*修改时间:2023/6/56
*作者:小夏
*/
int main(void){
	GPIO_Init();
	GPIO_NVIC();
	while(1){

	}		
}
void GPIO_IRQ(void) interrupt 40 
{
	u8 flag;
	flag=P3INTF;
	if(flag)
		P3INTF=0x00;
	if(flag&0x01){
		
	}
	if(flag&0x02){
	
	}
	if(flag&0x04){ //P32引脚
		P21=1;
	}
	if(flag&0x08){//P33引脚
		P21=0;
	}
	if(flag&0x10){
	
	}
	if(flag&0x20){
	
	}
	if(flag&0x40){
	
	}
	if(flag&0x80){
	
	}
}

总结

ok,这就完成了GPIO的全部教学

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片有机机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值