IAR工程STM8S208RB基于ST标准库下按键检测
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IAR工程STM8S208RB基于ST标准库下按键检测相关的知识,希望对你有一定的参考价值。
【IAR工程】STM8S208RB基于ST标准库下按键检测
- 📍相关篇《【IAR工程】STM8S208RB基于ST标准库下GPIO点灯示例》
- 🎈《【IAR工程】STM8S208RB基于ST标准库下EXTI外部中断》
- 🔖基于ST STM8S/A标准外设库:STSW-STM8069,版本号:
2.3.1
- 📌STSW-STM8069官方资源下载地址:https://www.st.com/zh/embedded-software/stsw-stm8069.html
- 🔧IAR编译器版本:
IAR Assembler for STMicroelectronics STM8 3.11.1
- 📌STM8S207/208RBT6最小系统板:
https://oshwhub.com/perseverance51/stm8s207rbt6-kai-fa-ban
✨当然可以通过上面的相关示例篇,可以将按键检测功能放到能支持EXTI外部中断的引脚上来实现,可以减少主任务的资源占用,EXTI外部中断可以说是按键扫描功能的升级版本,只不过EXTI针对STM8S208RB来说只支持端口A、B、C、D、E端口上的引脚,其他型号的也参不多只要是引脚数64或以上的端口号都是如此。作为普通IO输入引脚就没有这么多限制了。本例作为基础例程部分。
🛠按键输入检测GPIO引脚配置
- 🔖GPIO作为普通的输入模式配置有两种模式:
GPIO_MODE_IN_FL_NO_IT = (uint8_t)0x00, /*!< Input floating, no external interrupt */
GPIO_MODE_IN_PU_NO_IT = (uint8_t)0x40, /*!< Input pull-up, no external interrupt */
- 浮空输入
- 带上拉输入
📑具体引脚配置函数
#define KEY_GPIO_PORT (GPIO_TypeDef *)(GPIOG)
#define KEY_GPIO_PINS (GPIO_PIN_0 | GPIO_PIN_1)
#define KEY1 GPIO_ReadInputPin(KEY_GPIO_PORT,GPIO_PIN_0)
#define KEY2 GPIO_ReadInputPin(KEY_GPIO_PORT,GPIO_PIN_1)
void KEY_Init( void )
//设置PG0为不含中断带上拉电阻输入
// GPIO_Init(GPIOG , GPIO_PIN_0 , GPIO_MODE_IN_PU_NO_IT);
//设置PG1为不含中断带上拉电阻输入
// GPIO_Init(GPIOG , GPIO_PIN_1 , GPIO_MODE_IN_PU_NO_IT);
GPIO_Init( KEY_GPIO_PORT, ( GPIO_Pin_TypeDef )KEY_GPIO_PINS, GPIO_MODE_OUT_PP_HIGH_FAST ); //同上
📝主程序代码
/**************************************************************************************
实验现象:按下K1键,控制LED1指示灯亮灭,按下K2键,控制LED2指示灯亮灭
接线说明: 1,STM8S单片机-->LED
PC7-->LED1
PC6-->LED2
2,STM8S单片机-->独立按键模块
PG0-->K1
PG1-->K2
注意事项:1、点击“Download active application”按钮,程序下载完成后,即可运行程序。
***************************************************************************************/
#include "stm8s.h" /* 添加库函数头文件 */
#include "delay.h"
#include "led.h"
#include "key.h"
/* 主函数 */
int main( void )
//内部时钟为1分频 = 16Mhz
CLK_SYSCLKConfig( CLK_PRESCALER_HSIDIV1 );
LED_Init();
KEY_Init();
while( 1 )
if( KEY1 == 0 )
//检测到按键PG0被按下
delay_ms( 20 );//消抖
while( KEY1 == 0 );
LED1_TOGGLE;
if( KEY2 == 0 )
//检测到按键PG1被按下
delay_ms( 20 );//消抖
while( KEY2 == 0 );
LED2_TOGGLE;
//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
void assert_failed( u8* file, u32 line )
while ( 1 )
📚工程源码
- 🔖IAR对中文路径不友好,不要将工程解压在带有中文字符路径的文件夹内直接打开工程编译,这样会导致IAR内部检索文件路径将消耗大量CPU资源。
链接: https://pan.baidu.com/s/1m5qnnBZ0fba-Yrus0oTwJQ
提取码: txjn
STM8S903K3T6C基于ST Visual Develop开发输入输出按键检测示例
STM8S903K3T6C基于ST Visual Develop开发输入输出按键检测示例
- 使用IAR开发stm8调用标准库,有时候非常卡顿,虽然开发起来方便,但是体验感很差。
开发环境
ST Visual Develop + Cosmic CxSTM8 32K 4.3.4插件配合基于C语言开发。
- ST Visual Develop工具
https://www.st.com/zh/development-tools/stvd-stm8.html
- cosmic stm8 32k C编译器 v4.3.4
https://www.jb51.net/softs/626867.html#downintro2
STM8 I/O 口引脚配置表
按键检测示例代码
#include"stm8s903k.h"
_Bool LED @PD_ODR:1;
_Bool But @PC_IDR:1;
void GPIO_Init(void)
PD_DDR = 0xff;//推挽输出
PD_CR1 = 0xff;
PD_CR2 = 0x00;
PC_DDR = 0x00; //上拉输入
PC_CR1 = 0x00;
PC_CR2 = 0xFF;
void delay (unsigned int x)
unsigned int i,j;
for(i=x;i>0;i--)
for(j=300;j>0;j--);
void main()
GPIO_Init();
LED =0;
while(1)
if(But == 0)
while(But == 0);//等待按键松开
delay(5);//按键消抖
if(But)
LED = !LED;
以上是关于IAR工程STM8S208RB基于ST标准库下按键检测的主要内容,如果未能解决你的问题,请参考以下文章
IAR工程STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动
STM8S903K3T6C基于ST Visual Develop开发输入输出按键检测示例