-
包括以下每部分:
-
以上六部分代码集合:
Sum_IOin-out.C文件
#include "Sum_IOin-out.h"
#include "delay.h"
/*******************************************************************************
================================================================================
【平 台】stm32f103zet6_sumjess平台
【编 写】sumjess
【E-mail 】1371129880@qq.com
【软件版本】V2.0
【最后更新】2018年09月06日
【相关信息参考下列地址】
【网 站】
https://blog.csdn.net/qq_38351824
http://www.openedv.com/
http://www.stmcu.org/
http://www.firebbs.cn/forum.php
---------------------------------------------------------------------------------
【dev.env.】MDK5.14及以上版本
【Target 】stm32f103zet6
第一次修订:2017/11/09
第二次修订:2018/01/21
第三次修订:2018/09/06
---------------------------------------------------------------------------------
没有完美的代码,只有不断的奉献,大家一起努力;
赠人玫瑰手留余香,欢迎大家反馈bug!
================================================================================
********************************************************************************/
//LED、BEEP、relay、key、track驱动代码
///LED IO初始化/
初始化PF0-PF2为输出口.并使能这两个口的时钟//
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //使能PF端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| //RGB灯端口配置
GPIO_Pin_1|
GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //根据设定参数初始化GPIOF
GPIO_SetBits(GPIOF,GPIO_Pin_0); //PF0输出高电平
GPIO_SetBits(GPIOF,GPIO_Pin_1); //PF1输出高电平
GPIO_SetBits(GPIOF,GPIO_Pin_2); //PF2输出高电平
}
//--------------------------------------------------------------------------------------------//
/蜂鸣器初始化///
初始化PB8为输出口.并使能这个口的时钟
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->PB.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化GPIOB.8
GPIO_ResetBits(GPIOB,GPIO_Pin_8);//输出0,关闭蜂鸣器输出
}
//--------------------------------------------------------------------------------------------//
//Relay IO初始化
初始化PF3-PF4为输出口.并使能这两个口的时钟//
void Relay_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //使能PF端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3| //继电器端口配置
GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //根据设定参数初始化GPIOF
GPIO_SetBits(GPIOF,GPIO_Pin_3); //PF3输出高电平
GPIO_SetBits(GPIOF,GPIO_Pin_4); //PF4输出高电平
}
//--------------------------------------------------------------------------------------------//
//4*4按键初始化/
///初始化PF6-13为输出口.并使能这两个口的时钟
void key44_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //使能PF端口时钟
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|
GPIO_Pin_7|
GPIO_Pin_8|
GPIO_Pin_9; //端口配置
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOF, &GPIO_InitStruct); //根据设定参数初始化GPIOF
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10|
GPIO_Pin_11|
GPIO_Pin_12|
GPIO_Pin_13; //端口配置
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; //下拉输入
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOF, &GPIO_InitStruct); //根据设定参数初始化GPIOF
}
/**-------------------------------------------------------------
* @函数名 STM32_KEYScan
* @功能 获取KEY按键的输入电平状态,按键按下时为低电平0
* @参数 无
* @连接 将模块正面朝上,顺次插入即可。
* @返回值 1 对应开发板上第一个KEY按键处于按下状态
* 2 对应开发板上第二个KEY按键处于按下状态
* 3 对应开发板上第三个KEY按键处于按下状态
* 4 对应开发板上第四个KEY按键处于按下状态
* 0 开发板上没有KEY按键处于按下状态
* @参数说明 ( GPIOF->ODR & 0xfc3f ) 将PF6-PF9在ODR对应的位清零,然后赋值
***-------------------------------------------------------------*/
int STM32_KEYScan(void) //实现矩阵键盘。返回值为各按键的键值,此键值由用户自己定义。
{
u8 KeyVal; //keyVal为最后返回的键值。
GPIO_Write(GPIOF,(( GPIOF->ODR & 0xFC3F ) | 0x0040)); //让PF6到PF9输出二进制的0001.
switch(GPIOF->IDR & 0x3C00)//对PF10到PF13的值进行判断,以输出不同的键值。
{
case 0x0400: KeyVal=1; break;
case 0x0800: KeyVal=2; break;
case 0x1000: KeyVal=3; break;
case 0x2000: KeyVal='A';break;
}
GPIO_Write(GPIOF,(( GPIOF->ODR & 0xFC3F ) | 0x0080)); //让PF6到PF9输出二进制的0010
switch(GPIOF->IDR & 0x3C00) //对PF10到PF13的值进行判断,以输出不同的键值。
{
case 0x0400: KeyVal=4; break;
case 0x0800: KeyVal=5; break;
case 0x1000: KeyVal=6; break;
case 0x2000: KeyVal='B';break;
}
GPIO_Write(GPIOF,(( GPIOF->ODR & 0xFC3F ) | 0x0100)); //让PF6到PF9输出二进制的0100
switch(GPIOF->IDR & 0x3C00) //对PF10到PF13的值进行判断,以输出不同的键值。
{
case 0x0400: KeyVal=7; break;
case 0x0800: KeyVal=8; break;
case 0x1000: KeyVal=9; break;
case 0x2000: KeyVal='C';break;
}
GPIO_Write(GPIOF,(( GPIOF->ODR & 0xFC3F ) | 0x0200)); //让PF6到PF9输出二进制的1000
switch(GPIOF->IDR & 0x3C00) //对PF10到PF13的值进行判断,以输出不同的键值。
{
case 0x0400: KeyVal='*'; break;
case 0x0800: KeyVal=0; break;
case 0x1000: KeyVal='#'; break;
case 0x2000: KeyVal='D'; break;
}
return KeyVal;
}
//--------------------------------------------------------------------------------------------//
//循迹模块初始化
///初始化PB8-11为输出口.并使能这两个口的时钟
void track_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //使能PE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2| //循迹模块PE2~PE9端口配置
GPIO_Pin_3|
GPIO_Pin_4|
GPIO_Pin_5|
GPIO_Pin_6|
GPIO_Pin_7|
GPIO_Pin_8|
GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //根据设定参数初始化GPIOE
}
//--------------------------------------------------------------------------------------------//
/初始化成功/
void Init_success(void)
{
BEEP_ON;
LED_G_ON;delay_ms(100);LED_G_OFF;delay_ms(100);
LED_R_ON;delay_ms(100);LED_R_OFF;delay_ms(100);
LED_B_ON;delay_ms(100);LED_B_OFF;delay_ms(100);
BEEP_OFF;
}
Sum_IOin-out.h文件
/*******************************************************************************
================================================================================
【平 台】stm32f103zet6_sumjess平台
【编 写】sumjess
【E-mail 】1371129880@qq.com
【软件版本】V2.0
【最后更新】2018年09月06日
【相关信息参考下列地址】
【网 站】
https://blog.csdn.net/qq_38351824
http://www.openedv.com/
http://www.stmcu.org/
http://www.firebbs.cn/forum.php
---------------------------------------------------------------------------------
【dev.env.】MDK5.14及以上版本
【Target 】stm32f103zet6
第一次修订:2017/11/09
第二次修订:2018/01/21
第三次修订:2018/09/06
---------------------------------------------------------------------------------
没有完美的代码,只有不断的奉献,大家一起努力;
赠人玫瑰手留余香,欢迎大家反馈bug!
================================================================================
********************************************************************************/
//LED、BEEP、relay、key、track驱动代码
#ifndef __SUM_INIO_OUT_H
#define __SUM_INIO_OUT_H
#include "sys.h"
#define BEEP_ON GPIO_SetBits(GPIOB,GPIO_Pin_8)
#define BEEP_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_8)
#define LED_R_OFF GPIO_SetBits(GPIOF,GPIO_Pin_0)
#define LED_R_ON GPIO_ResetBits(GPIOF,GPIO_Pin_0)
#define LED_G_OFF GPIO_SetBits(GPIOF,GPIO_Pin_1)
#define LED_G_ON GPIO_ResetBits(GPIOF,GPIO_Pin_1)
#define LED_B_OFF GPIO_SetBits(GPIOF,GPIO_Pin_2)
#define LED_B_ON GPIO_ResetBits(GPIOF,GPIO_Pin_2)
#define Relay_A_OFF GPIO_SetBits(GPIOF,GPIO_Pin_3)
#define Relay_A_ON GPIO_ResetBits(GPIOF,GPIO_Pin_3)
#define Relay_B_OFF GPIO_SetBits(GPIOF,GPIO_Pin_4)
#define Relay_B_ON GPIO_ResetBits(GPIOF,GPIO_Pin_4)
void LED_Init(void);
void BEEP_Init(void);
void Relay_Init(void);
void key44_Init(void);
int STM32_KEYScan(void);
void track_Init(void);
void Init_success(void);
#endif