提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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的全部教学