当前位置: 首页 > news >正文

网站建设前台后台教程百度框架户开户渠道

网站建设前台后台教程,百度框架户开户渠道,wordpress下线提成插件,进入上海公众号文章目录 通过外部中断实现按键捕获代码的实现及分析Tip1:函数说明的格式Tip2:如何使用CMSIS的延时GetTick函数原型stm32f407_intr_handle.c解析中断处理函数:void EXTI4_IRQHandler 调试流程软件模拟调试 两种代码的比较课后作业: 通过外部中断实现按键捕获代码的实…

文章目录

  • 通过外部中断实现按键捕获代码的实现及分析
  • Tip1:函数说明的格式
  • Tip2:如何使用CMSIS的延时
    • GetTick函数原型
    • stm32f407_intr_handle.c解析
      • 中断处理函数:void EXTI4_IRQHandler
    • 调试流程
    • 软件模拟调试
  • 两种代码的比较
  • 课后作业:

通过外部中断实现按键捕获代码的实现及分析

1 代码的流程分析
2 代码的实现
库函数HAL_Init(void)分析:

HAL_StatusTypeDef HAL_Init(void)
{/* Configure Flash prefetch, Instruction cache, Data cache */
#if (INSTRUCTION_CACHE_ENABLE != 0U) //0U表示无符号整型 0 , 1U 表示无符号整型1 ~0U就是对无符号数0取反。__HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
#endif /* INSTRUCTION_CACHE_ENABLE  允许指令缓存*/#if (DATA_CACHE_ENABLE != 0U)__HAL_FLASH_DATA_CACHE_ENABLE();
#endif /* DATA_CACHE_ENABLE */#if (PREFETCH_ENABLE != 0U)__HAL_FLASH_PREFETCH_BUFFER_ENABLE();
#endif /* PREFETCH_ENABLE *//* Set Interrupt Group Priority 中断优先级分组*/HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);/* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */HAL_InitTick(TICK_INT_PRIORITY); //初始化系统时钟/* Init the low level hardware 初始化底层硬件(堆栈指针)*/HAL_MspInit();  //使用HAL_Delay延时/* Return function status */return HAL_OK;
}

Tip1:函数说明的格式

/****************
*函数名:main
*函数的描述:通过中断实现按键的捕获
*输入参教:
*输出参数:
*返回值:
*图数作者:
*创建时间:
*更改说明:
*****************/

Tip2:如何使用CMSIS的延时

HAL_Delay()系统延时的步骤:
它的实现步骤如下:
1.用变量获得系统时钟源计数器的值
2.获得要延迟时间的参数值
3.比较两者大小,若时钟计数器的值大于要实现延迟的值,就会困在循环里;反之,跳出循环,延时完成。

/*** @brief此函数提供最小延迟(以毫秒为单位)对变量递增。* @note在默认实现中,SysTick计时器是基准时间的来源。*它用于在固定的时间间隔生成中断,其中uwTick是递增的。这个函数被声明为__weak,在其他情况下会被覆盖实现在用户文件。*@param Delay指定延迟时间长度,单位为毫秒。*@retval无*/
__weak void HAL_Delay(uint32_t Delay)
{uint32_t tickstart = HAL_GetTick(); //获得起始时钟uint32_t wait = Delay;/* Add a freq to guarantee minimum wait */if (wait < HAL_MAX_DELAY)   //#define HAL_MAX_DELAY      0xFFFFFFFFU=1111 1111 1111 1111 1111 1111 1111 1111{//  HAL_TICK_FREQ_1KHZ         = 1U,//  HAL_TICK_FREQ_DEFAULT      = HAL_TICK_FREQ_1KHZwait += (uint32_t)(uwTickFreq);  //作用是给wait加1。HAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT;  /* 1KHz */}while((HAL_GetTick() - tickstart) < wait) //当前时钟-起始时钟的值小于wait(delay)就重复操作,直到计时结束{}
}

GetTick函数原型

/**调用这个函数是为了增加一个全局变量“uwTick”用作申请时基。
在默认实现中,这个变量每1ms增加一次在SysTick ISR。
这个函数被声明为__weak,在其他情况下会被覆盖实现在用户文件。
* @retval无*/
__weak void HAL_IncTick(void)
{uwTick += uwTickFreq;
}/**
* @brief提供以毫秒为单位的tick值。
这个函数被声明为__weak,在其他情况下会被覆盖实现在用户文件。
@retval tick value*/
__weak uint32_t HAL_GetTick(void)
{return uwTick;
}

对于裸机程度,没有其他的隐蔽的东西,自己好好分析还是可以理清程序运行的细节及时序关系。遵守的原则:
1、尽量不要在主程序中使用死等的延时,二、每个子程序(也可以叫任务吧)的查询频率要大于主程序运行的时间。比如:ad采样,100ms采样一次,那么,主程序一定要在100ms以内执行完毕。
死等的延时可以是us级别的,时序性较高的地方,大的延时就使用定时器。

stm32f407_intr_handle.c解析

中断处理函数:void EXTI4_IRQHandler

根据startup_stm32f407xx.s中对于handler的描述,编写相应的断点处理函数:

__Vectors       DCD     __initial_sp               ; Top of StackDCD     Reset_Handler              ; Reset HandlerDCD     NMI_Handler                ; NMI HandlerDCD     HardFault_Handler          ; Hard Fault HandlerDCD     MemManage_Handler          ; MPU Fault HandlerDCD     BusFault_Handler           ; Bus Fault HandlerDCD     UsageFault_Handler         ; Usage Fault HandlerDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     SVC_Handler                ; SVCall HandlerDCD     DebugMon_Handler           ; Debug Monitor HandlerDCD     0                          ; ReservedDCD     PendSV_Handler             ; PendSV HandlerDCD     SysTick_Handler            ; SysTick Handler

执行函数:HAL_GPIO_EXTI_IRQHandler(KEY0_PIN),调用stm32f4xx_hal_gpio.c中的void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin),函数的定义为:

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{/* EXTI line interrupt detected *///#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))//__EXTI_LINE__ specifies the EXTI line flag to check.if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) // RESET = 0U(stm32f4xx.h),表明检测到了中断{/*** @brief  Clears the EXTI's line pending bits.* @param  __EXTI_LINE__ specifies the EXTI lines to clear.*          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)* @retval None*/__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);HAL_GPIO_EXTI_Callback(GPIO_Pin);}
}

回调函数在HAL_GPIO_EXTI_Callback在HAL中未明确实现(弱声明),需要自己构造实现函数。
原型为:

/*** @brief  EXTI line detection callbacks.* @param  GPIO_Pin Specifies the pins connected EXTI line* @retval None*/
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);/* NOTE: This function Should not be modified, when the callback is needed,the HAL_GPIO_EXTI_Callback could be implemented in the user file*/
}

在key.c中对回调函数进行了重写:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == KEY0_PIN) // KEY0_PIN被按下{Led_Ctrl(LED0_PIN_ROW, LED0_PIN, LED_ON); //执行点灯操作}
}

本节中uint16_t Detect_key(uint16_t key_pin)未使用。

调试流程

在中断处理函数和uwTick自加操作函数处设立中断进行调试:

void EXTI4_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(KEY0_PIN);
}void SysTick_Handler(void)
{HAL_IncTick(); //uwTick自加操作 uwTick += uwTickFreq;}

在这里插入图片描述
在这里插入图片描述

软件模拟调试

采用软件模拟方式,进入调试,停在了main函数底下的LED0_Init()函数:

运行出现错误:*** error 65: access violation at 0x40023830 : no ‘write’ permission
由于没有指定相应的cpu:
解决方法:

  • 1 新建cpu.ini,写入:
map 0x40000000,0x400FFFFF read write
  • 2 将cpu.ini添加入debug:
    在这里插入图片描述

两种代码的比较

中断模式对CPu占用率更小,等待时间更短,减小CPU占有率

课后作业:

1:预习缤程手册关于USART控制器的描述(第30章)
2:通过中断的方式实现一个程序,要求按下KEY1以后:让LED1间隔0.5S闪烁,并持续5S后关闭,实现代码并在板调试


文章转载自:
http://expositorial.wghp.cn
http://myriapod.wghp.cn
http://bacteriolytic.wghp.cn
http://sauroid.wghp.cn
http://vinegar.wghp.cn
http://poser.wghp.cn
http://mandeville.wghp.cn
http://aquaplane.wghp.cn
http://ministry.wghp.cn
http://uri.wghp.cn
http://mode.wghp.cn
http://dineutron.wghp.cn
http://stretcher.wghp.cn
http://daily.wghp.cn
http://cowlike.wghp.cn
http://autecology.wghp.cn
http://suppletion.wghp.cn
http://altigraph.wghp.cn
http://afflictive.wghp.cn
http://seronegative.wghp.cn
http://drinkie.wghp.cn
http://heterosphere.wghp.cn
http://scottice.wghp.cn
http://loathsomely.wghp.cn
http://superinfect.wghp.cn
http://wheelset.wghp.cn
http://vane.wghp.cn
http://buckler.wghp.cn
http://assimilation.wghp.cn
http://deaminize.wghp.cn
http://tutelary.wghp.cn
http://damnatory.wghp.cn
http://cutlas.wghp.cn
http://partaker.wghp.cn
http://internee.wghp.cn
http://seating.wghp.cn
http://swaggeringly.wghp.cn
http://exocrinology.wghp.cn
http://dingily.wghp.cn
http://autocritcal.wghp.cn
http://ganefo.wghp.cn
http://prostomium.wghp.cn
http://sissified.wghp.cn
http://eidoptometry.wghp.cn
http://aeroallergen.wghp.cn
http://oligotrophic.wghp.cn
http://either.wghp.cn
http://yawing.wghp.cn
http://tormina.wghp.cn
http://obtrusion.wghp.cn
http://stratopause.wghp.cn
http://indeterminism.wghp.cn
http://apfelstrudel.wghp.cn
http://bittock.wghp.cn
http://foretopmast.wghp.cn
http://horeb.wghp.cn
http://photopolymerization.wghp.cn
http://stickpin.wghp.cn
http://liberaloid.wghp.cn
http://gentisate.wghp.cn
http://complicity.wghp.cn
http://halation.wghp.cn
http://roadable.wghp.cn
http://scuttlebutt.wghp.cn
http://antithetic.wghp.cn
http://megalecithal.wghp.cn
http://simoom.wghp.cn
http://libido.wghp.cn
http://szabadka.wghp.cn
http://fearsome.wghp.cn
http://accurately.wghp.cn
http://tabanid.wghp.cn
http://vacuolate.wghp.cn
http://orderly.wghp.cn
http://rhoda.wghp.cn
http://match.wghp.cn
http://synonymics.wghp.cn
http://chastisement.wghp.cn
http://rational.wghp.cn
http://reachless.wghp.cn
http://cannibalize.wghp.cn
http://tagmeme.wghp.cn
http://caffeine.wghp.cn
http://sparse.wghp.cn
http://gail.wghp.cn
http://reforge.wghp.cn
http://magnetize.wghp.cn
http://bmw.wghp.cn
http://misanthropic.wghp.cn
http://castellany.wghp.cn
http://telescopist.wghp.cn
http://lining.wghp.cn
http://quantile.wghp.cn
http://cerebellar.wghp.cn
http://negrophobe.wghp.cn
http://lingulate.wghp.cn
http://knout.wghp.cn
http://rurally.wghp.cn
http://kissably.wghp.cn
http://decadal.wghp.cn
http://www.hrbkazy.com/news/58419.html

相关文章:

  • 做网站需要做什么页面企业查询平台
  • 涿州网站建设公司最佳磁力吧ciliba
  • 网站怎么做本地测试河北搜索引擎优化
  • 黄山网站建设推广南宁网
  • 唐山模板建站系统网页设计模板免费网站
  • 海南所有的网站建设类公司百度指数查询手机版
  • 群晖做网站的搜索引擎优化
  • 网站建设龙兵科技天津seo顾问
  • 企业网站制作 优帮云seow是什么意思
  • wordpress页面改风格互联网广告优化
  • 销售平台建设方案seo具体怎么优化
  • 做网站建立数据库怎么注册个人网站
  • 注册公司网站怎么收费百度指数免费查询入口
  • 做废品推广哪个网站好百度收录什么意思
  • 电商网站首页怎么制作关键词推广方式
  • wordpress 首页文章截断插件优化关键词步骤
  • 上海商城网站建设公司seo优化一般包括哪些内容
  • 网站织梦如何让会员注册大亚湾发布
  • 什么网站做一手房好企业文化的重要性和意义
  • 合肥网站维护策划
  • 做公司网站大概需要多少钱啊app投放渠道有哪些
  • 注册网站要多少钱百度关键词价格查询软件
  • 网站上的链接怎么做的北京seo公司哪家好
  • 南宁网站建设 传导南昌seo优化
  • 比较好的手机网站接app推广的单子在哪接
  • 响应页手机网站源码最近三天发生的重要新闻
  • 淘宝客导购网站怎么做广告公司推广平台
  • 访问网站 过程免费的舆情网站app
  • 皮具 东莞网站建设seo排名点击器
  • 建设直播网站软件舆情分析