STM8遇坑[EEPROM读取debug不正常release正常][ STVP下载成功单运行不成功][定时器消抖莫名其妙的跑不通流程]

news2024/11/19 3:38:18

EEPROM读取debug不正常release正常

这个超级无语,研究和半天,突然发现调到release就正常了,表现为写入看起来正常读取不正常,这个无语了,不想研究了

STVP下载不能够成功运行

本文摘录于:https://blog.csdn.net/qlexcel/article/details/71270780只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人!
在这里插入图片描述
现在我都只用三根线来调试仿真!

定时器消抖莫名其妙的跑不通流程

这里做了一个定时器消抖功能,但是莫名其妙的无语了,竟然跑不通消抖算法,IO中断函数设置标志位:

/**
  * @brief External Interrupt PORTB Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER ( EXTI_PORTB_IRQHandler, 4 )
{
        /* In order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction.
        */
  if(GPIO_ReadInputPin(KEY_LIGHTN_GPIO,KEY_LIGHTN_PIN)==0)
  {
    //uart_printf("KEY_LIGHTN Irq\r\n" );
    key_judge=KEY_TYPE_LIGHTN;
  }
  if(GPIO_ReadInputPin(KEY_SWITCHP_GPIO,KEY_SWITCHP_PIN)==0)
  {
    //uart_printf("KEY_SWITCHP Irq\r\n" );
    key_judge=KEY_TYPE_SWITCHP;
  }
}

/**
  * @brief External Interrupt PORTC Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER ( EXTI_PORTC_IRQHandler, 5 )
{
        /* In order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction.
        */
  if(GPIO_ReadInputPin(KEY_LIGHTP_GPIO,KEY_LIGHTP_PIN)==0)
  {
    //uart_printf("KEY_LIGHTP Irq\r\n" );
    key_judge=KEY_TYPE_LIGHTP;
  }
  if(GPIO_ReadInputPin(KEY_SWITCHN_GPIO,KEY_SWITCHN_PIN)==0)
  {
    //uart_printf("KEY_SWITCHN Irq\r\n" );
    key_judge=KEY_TYPE_SWITCHN;
  }
}

/**
  * @brief External Interrupt PORTD Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER ( EXTI_PORTD_IRQHandler, 6 )
{
        /* In order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction.
        */
  if(GPIO_ReadInputPin(KEY_OnOff_GPIO,KEY_OnOff_PIN)==0)
  {
    //uart_printf("KEY_OnOff Irq\r\n" );
    key_judge=KEY_TYPE_OnOff;
  }
}

定时器中断设置标志位,然后在while主循环调用消抖函数:

// 定时器 20ms
void TIMER_Initializes( void )
{
        TIM2_TimeBaseInit( TIM2_PRESCALER_16, 20000 ); 
        TIM2_ClearFlag( TIM2_FLAG_UPDATE );            //清除标志位
        TIM2_ITConfig( TIM2_IT_UPDATE, ENABLE );       //使能更新UPDATE中断
        enableInterrupts();                       //使能全局中断
        TIM2_SetCounter( 0 );                          //计数值归零
        TIM2_Cmd( ENABLE );                            //启动定时器
}
uint16_t _ticks = 0;
INTERRUPT_HANDLER ( TIM2_UPD_OVF_BRK_IRQHandler, 13 )
{
        /* In order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction.
        */

        TIM2_ClearITPendingBit ( TIM2_IT_UPDATE );     //清除中断标志

        _ticks++;
        timer_bit_flag.timer20ms_flag = 1;
        if ( _ticks % 25 == 0 )
        {
                timer_bit_flag.timer500ms_flag = 1;
        }
        else if ( _ticks % 50 == 0 )
        {
                timer_bit_flag.timer1000ms_flag = 1;
        }
}
void main ( void )
{
        uint8_t uart_rec_len;
        CLK_DeInit();
        CLK_LSICmd ( ENABLE );
        CLK_HSICmd ( ENABLE );
        while ( SET != CLK_GetFlagStatus ( CLK_FLAG_HSIRDY ) );
        CLK_SYSCLKConfig ( CLK_PRESCALER_CPUDIV1 );
        CLK_HSIPrescalerConfig ( CLK_PRESCALER_HSIDIV1 ); //HSI = 16M (1分频)
        GPIO_Configuration();
        TIMER_Initializes();
        UART_Initializes();
        //ADC_Initializes();
        eeprom_init();
        timer1_init();
        
        enableInterrupts();                       //使能全局中断
		if(g_config.PowerOff)
		{
			rgb_SetCompare(0,0,0);
			uart_printf("Device PowerOff\r\n");
		}
        while ( 1 )
        {
                if ( timer_bit_flag.timer20ms_flag == 1 )
                {
                        timer_bit_flag.timer20ms_flag = 0;
                        user_timer_handler();
                }

消抖函数处理完成后调用key_handle函数进行处理,这里出现一个莫名其妙的问题,竟然没有进入下面的语句清除变量,无语了,我的天了,老哥撸代码十来年,搞了大半天,投降了,最后用了在中断中直接进行定时器消抖,无语了!记录再次,以后如果悟到了再来改

int8_t key_state_read(void) 
{
  switch(key_judge)
  {
    case KEY_TYPE_LIGHTP:
      if(GPIO_ReadInputPin(KEY_LIGHTP_GPIO,KEY_LIGHTP_PIN)==0) return ((uint8_t)KEY_TYPE_LIGHTP);
      else return 0;
    case KEY_TYPE_LIGHTN:
      if(GPIO_ReadInputPin(KEY_LIGHTN_GPIO,KEY_LIGHTN_PIN)==0) return ((uint8_t)KEY_TYPE_LIGHTN);
      else return 0;
    case KEY_TYPE_SWITCHP:
      if(GPIO_ReadInputPin(KEY_SWITCHP_GPIO,KEY_SWITCHP_PIN)==0) return ((uint8_t)KEY_TYPE_SWITCHP);
      else return 0;
    case KEY_TYPE_SWITCHN:
      if(GPIO_ReadInputPin(KEY_SWITCHN_GPIO,KEY_SWITCHN_PIN)==0) return ((uint8_t)KEY_TYPE_SWITCHN);
      else return 0;
    case KEY_TYPE_OnOff:
      if(GPIO_ReadInputPin(KEY_OnOff_GPIO,KEY_OnOff_PIN)==0) return ((uint8_t)KEY_TYPE_OnOff);
      else return 0;
  default:
     return 0;
  }

}
void user_timer_handler(void) 
{
	if(key_judge!=KEY_TYPE_IDLE)
	{
         if(key_state_read()!=0)
		{		
            key_loop++;
			if(key_loop==100)
			{
                //uart_printf("loop long\r\n");
				key_handle(key_judge,KEY_ACTION_LONG);
				key_loop=0;
				key_judge=KEY_TYPE_IDLE;
			}
		}
		else
		{
			if((key_loop>=1)&&(key_loop<100))
			{		
			    key_handle(key_judge,KEY_ACTION_SHORT);
			}
			key_loop=0;//没有进入这里清除变量
			key_judge=KEY_TYPE_IDLE;
		}   
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每周AI大事件 百度文心一言上线搜索、文生视频、图表制作等5大插件

每周AI大事件 | 百度文心一言上线搜索、文生视频、图表制作等5大插件 文章目录 一、百度文心一言简介二、百度文心一言五大插件功能详解三、 开启文心一言 体验览卷文档E言易图 &#xff08;貌似不太理想&#xff0c;可能指令姿势不对&#xff09;说图解画&#xff08;貌似不太…

「第2讲」正版PyCharm但是免费,安装教程来了,还有中文插件哦~

大家好&#xff0c;这里是程序员晚枫。 免费的【50讲Python自动化办公】持续更新中&#xff0c;关注我学习吧&#x1f447;想了解更多精彩内容&#xff0c;快来关注程序员晚枫 上一讲&#xff1a;「第1讲」Python的下载、安装和卸载&#xff0c;有手就能学 装完了Python&#…

char *str,char str,char * str和char str的区别

1.char *str是一个指向字符或字符串的指针&#xff0c;总是指向一个字符的起始地址&#xff0c;例如 char *str "Hello"; cout << *str << endl; // 输出&#xff1a;H cout << str << endl; // 输出&#xff1a;Hello str "World…

5.4 webrtc的线程

那今天呢&#xff1f;我们来了解一下webrtc中的threed&#xff0c;首先我们看一下threed的类&#xff0c;它里边儿都含了哪些内容&#xff1f;由于threed的类非常大啊&#xff0c;我们将它分成两部分。 那第一部分呢&#xff0c;是我们看threed的类中都包含了哪些数据之后呢&a…

linux设备驱动:kset、uevent、class

目录 kset&#xff1a;驱动的骨架 kset_create_and_add()函数 设备驱动模型实验2-kobject点灯&#xff08;加入kset&#xff09; kset.c文件 Makefile文件 执行过程 uevent&#xff1a;内核消息的快递包 uevent机制 kobject_uevent()函数 设备驱动模型实验3-kobject点…

AMBA总线协议(3)——AHB(一)

目录 一、前言 二、什么是AHB总线 1、概述 2、一个典型的基于AHB总线的微处理器架构 3、基本的 AHB 传送特性 三、AMBA AHB总线互联 四、小结 一、前言 在之前的文章中我们初步的了解了一下AMBA总线中AHB,APB,AXI的信号线及其功能&#xff0c;从本文开始我们…

NOIP2014普及组复赛 珠心算测验 螺旋矩阵 真题答案

珠心算测验 说明 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练&#xff0c; 既能够开发智力&#xff0c;又能够为日常生活带来很多便利&#xff0c;因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他…

wustoj2006后天

#include <stdio.h> int main() {int n;scanf("%d",&n); printf("%d",(n2)%7);return 0;}

星际争霸之小霸王之小蜜蜂(一)--窗口界面设计

目录 前言 一、安装pygame库 1、pygame库简介 2、在windows系统安装pygame库 二 、搭建游戏框架 1、创建游戏窗口 2、改变窗口颜色 总结 前言 大家应该都看过或者都听说过python神书“大蟒蛇”&#xff0c;上面有一个案例是《外星人入侵》&#xff0c;游戏介绍让我想起了上…

上位机系统(系统的架构、串口的使用、协议的定义、开发环境的配置)

上位机系统 1. 系统架构 实机拓扑架构 硬件支持 使用 VSPD 6.9 实现&#xff1a; 效果图 当状态值超过警戒值&#xff0c;就会变成红色&#xff0c;同时在界面的上方显示红色的“设备告警” 3. 串口电气特性 波特率&#xff1a;19200 数据位数&#xff1a;8 位 u 奇偶校验&…

shell脚本之函数

shell函数 函数的组成&#xff1a;函数名和函数体 函数的格式 function 函数名 { 命令序列 } function cat {cat /etc/passwd}函数名() { 命令序列 } cat () {cat /etc/passwd}function 函数名 (){ 命令序列 } function cat() {cat /etc/passwd}函数相关命令 declare -F #查…

记录每日LeetCode 2236. 判断根结点是否等于子结点之和 Java实现

题目描述&#xff1a; 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。 初始代码&#xff1a; /*** Definition f…

Cpp学习——类与对象3

目录 一&#xff0c;初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二&#xff0c;单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…

7-7 找最小的字符串

分数 15 全屏浏览题目 切换布局 作者 张泳 单位 浙大城市学院 本题要求编写程序&#xff0c;针对输入的N个字符串&#xff0c;输出其中最小的字符串。 输入格式&#xff1a; 输入第一行给出正整数N&#xff1b;随后N行&#xff0c;每行给出一个长度小于80的非空字符串&…

js 中的原型

JavaScript规定&#xff0c;每一个构造函数都有一个prototype属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象。这个对象可以挂载函数&#xff0c;对象实例化不会多次创建原型上函数&#xff0c;节约内存。我们可以把那些不变的方法&#xff0c;直接定义在p…

NPM 为自己创建的组织付费

目录 1、升级为付费组织计划 2、查看、下载和通过电子邮件发送组织的收据 2.1 查看数据 3、更新组织账单设置 3.1 更新信用卡信息 3.2 更新帐单收据电子邮件和额外收据信息 4、降级为免费组织 1、升级为付费组织计划 作为组织所有者&#xff0c;您可以将免费组织计划升级…

智能监控系统的守护者:人工智能行为识别技术的崛起与发展

人工智能助力监控系统&#xff1a;行为识别在安全监控中的应用与挑战 摘要&#xff1a; 随着人工智能技术的快速发展&#xff0c;行为识别在监控系统中的应用逐渐成为安全监控领域的重要工具。本文将详细探讨人工智能行为识别技术在监控系统中的应用&#xff0c;以及在实际应用…

Tween.js动画函数使用demo

案例&#xff1a; 小球的运动数字的自增 demo <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&g…

AI 绘画Stable Diffusion 研究(十三)SD数字人制作工具SadTlaker使用教程

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 想必大家经常看到&#xff0c;无论是在产品营销还是品牌推广时&#xff0c;很多人经常以数字人的方式来为自己创造财富。而市面上的数字人收费都比较昂贵&#xff0c;少则几…