IAR工程STM8S208RB基于ST标准库下按键检测

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IAR工程STM8S208RB基于ST标准库下按键检测相关的知识,希望对你有一定的参考价值。

【IAR工程】STM8S208RB基于ST标准库下按键检测


✨当然可以通过上面的相关示例篇,可以将按键检测功能放到能支持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 */
  1. 浮空输入
  2. 带上拉输入

📑具体引脚配置函数

#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开发输入输出按键检测示例

STM8S系列基于IAR标准外设printf输出demo

STM8S系列基于IAR开发外部中断(EXTI)按键检测示例

stm8s的iar如何和谐

STM8S903K3T6C基于ST Visual Develop开发串口数据收发示例