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

建设自己网站的流程图杭州网站推广大全

建设自己网站的流程图,杭州网站推广大全,上海网站设计厂家,南昌网站优化公司目录 LED与EXTI配置 基本定时器使用 软件定时器 在HAL库中实现printf 重点--记得自己添加头文件 队列实现 二值信号量实现 计数信号量实现 DMA实现 ADC配置 RTC配置 看门狗 窗口看门狗 FreeRTOS结合MX软件开发,基础配置直接生成,我们只…

目录

LED与EXTI配置

基本定时器使用 

 软件定时器 

在HAL库中实现printf 

重点--记得自己添加头文件 

队列实现 

二值信号量实现

计数信号量实现

DMA实现

ADC配置

RTC配置

看门狗

窗口看门狗 


FreeRTOS结合MX软件开发,基础配置直接生成,我们只需要会操作即可,操作一些API函数,注意事项就是我们需要知道有哪些函数是我们写的,而哪些函数是软件自己生成的,并且我们需要知道一个外设的使用流程

LED与EXTI配置

 

 

 

 

 上下拉模式和触发模式不要选择错误

对于EXTI的我们只需要操作回调函数即可,通过判断端口模式即可,再按键中我是不赞成载中断里面使用延时函数的,因此你需要学会如何避免延时函数,比如由于按键抖动我们需要多次判断,使用状态机的思维,因此我们再设置的时候,需要先关闭该中断,等检测到了真实按键按下再打开就可以了 

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == WK_UP_Pin){HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);  }
}

除了第一次点open之外,其余的情况点close,不然会卡,我也不知道为什么 

基本定时器使用 

基础定时器指:TIM6、TIM7,能完成的功能是定时、触发中断或者DMA请求(当计数器溢出产生更新事件,并且只有该事件能引起中断或DMA请求,不像其他定时器有很多中断类型。基本定时器只有更新中断) ,并且能输出触发信号TRGO---用于触发DAC同步电路

 

one pulse mode--表示是否使用定时器的单次定时模式,意思就是当计数器发生下一次溢出事件时,定时器就会停止计数,一般我们不使用 

 

这里的定时时间为3.64ms--使用串口打印检测时间是否符合 

 定时时间计算--period * ( (1*(psc+1))/72M) 

 

基本定时器的使用函数,其中我们使用MX创建的定时器默认是不打开的,因此我们需要手动打开一下,至于使用哪一种方式打开,取决于我们自己,常用中断工作方式 

 

 遇到的问题:我在TIM6的初始化函数中写了printf,出不来结果,原因是因为串口初始化没有完成,它在TIM6后面,因此无法在里面使用printf

 

HAL_TIM_Base_Start_IT(&htim6);void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static uint16_t count = 0;if(htim->Instance == TIM6){count++;if(count == 100)  {printf("enter time6\r\n");count =0;}}
} //按理说是364ms打印一次

结果接近,因此对于基础定时器我们需要开启定时器以及知道回调函数如何写即可 

 

 

 软件定时器 

优先级、堆栈大小,定时器指令队列长度 

默认MX软件生成的定时器是没有打开的,并且并没有设置周期,因此你需要做两个操作,设置周期、打开定时器 。但是做完这些操作后,发现还是有错误,原来是头文件没有加入

 

#include "timers.h"xTimerChangePeriod(MyTimer0Handle,pdMS_TO_TICKS(1000),portMAX_DELAY);
xTimerStart(MyTimer0Handle,portMAX_DELAY);MyTimer0Handle---为定时器句柄
portMAX_DELAY-为阻塞时间,因为定时器的实质是使用队列完成,因此队列的接收数据和发送数据是存在阻塞时间的

在HAL库中实现printf 

#include "stdio.h"//重定义fputc函数 
int fputc(int ch, FILE *f)
{      while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   USART1->DR = (uint8_t) ch;      return ch;
}

重点--记得自己添加头文件 

队列实现 

没有套路(记得加头文件),直接配置好,其余的我们只需要使用接收或者发送函数即可

 if(KeyPress){KeyPress = 0;if(KeyNum == KEY0_PRESS){//装队列数据xQueueSend(myQueue01Handle,( void * )&senddata,0);printf("KEY0_PRESS\r\n");//   }if(KeyNum == KEY1_PRESS){printf("KEY1_PRESS\r\n");//取队列数据,并且对比,对比成功,led灯反转xQueueReceive(myQueue01Handle,( void * )&recvdata,0);if(recvdata == 9)HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);  }if(KeyNum == WK_UP_PRESS){printf("WK_UP_PRESS\r\n");}          }

二值信号量实现

一开始创建的信号量本来没有,需要一开始就释放的,但是在我实验的过程中,我一开始就获取二值信号量,获取成功了

 if(KeyNum == KEY0_PRESS)  xSemaphoreGive(myBinarySem01Handle);          if(KeyNum == KEY1_PRESS)      if( xSemaphoreTake( myBinarySem01Handle, ( TickType_t ) 0 ) == pdTRUE )//获取成功printf("get suceess\r\n");elseprintf("get fail\r\n");if(KeyNum == WK_UP_PRESS)if( xSemaphoreTake( myBinarySem01Handle, ( TickType_t ) 0 ) == pdTRUE )//获取成功printf("get suceess2\r\n");elseprintf("get fail2\r\n");实验现象--按KEY1成功获取,再按一次WK,获取失败,再按KEY0释放,再按WK获取成功

计数信号量实现

定义好计数资源,直接使用函数即可

DMA实现

DMA能实现循环接收,因此在外设到存储器的时候(相当于ADC数据通过DMA传输到我们自己定义的数组中或者存储器中),我们一般希望的都是连续接收,并且这里定义了两个DMA,一个收,一个发

都是存储器到外设,我们一般是常规模式,不然会一直发送,我们这里举例了数组--串口,如果循环的话,会一直发送,陷入死循环,因此这里的memory--外设是常规模式

外设(除了内核之外的东西都是外设),除了systick、NVIC、DMA其余基本都是外设

 外设到寄存器,指的就是串口或者ADC等外设的数据到我们自己定义的数组中或者存储芯片中

寄存器到外设,一般都是数组到串口然后打印出来,常用于串口

 

 unsigned char s_buf[]="hello world\r\n";HAL_UART_Transmit_DMA(&huart1,s_buf,sizeof(s_buf));
直接使用函数进行发送,但是一般发送需要延时一会,因为有时候被其他程序占了,使用串口发送需要稍微延时一会此处一定要有延时,否则需要加入判断DMA是否传输完成的标志!!!unsigned char s_buf[]="hello world 7676775645543546789876545\r\n";HAL_UART_Transmit_DMA(&huart1,s_buf,sizeof(s_buf));while( hdma_usart1_tx.State == HAL_DMA_STATE_READY );  //获取DMA的状态,判断它是否准备好下一次,其实就是上一次有没有完成所以上面的可以封装一下,发送内容、发送的DMA、需要发送的串口

ADC配置

RTC配置

 配置RTC时钟32.768KHZ

看门狗


 在由单片机构成的微型计算机系统中单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环;或者因为用户配置代码出现BUG,导致芯片无法正常工作,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 

简单说:看门狗的本质就是定时计数器,计数器使能之后一直在累加 而喂狗就是重新写入计数器的值,时计数器重新累加,

如果在一定时间内没有接收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)
喂狗是自己喂的,比如设置时间为50ms,那么你必须设置一个定时器,定时在50ms之前喂狗,不然系统会重启

clock prescaler是分频系数,下面的reload value是重载值

Tout=((4×2^prescaler) ×rlr) /32

       Tout=((4×2^PRER) ×RLR)/LSI时钟频率
其中 Tout 为看门狗溢出时间(单位为 ms);prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值);
4×2^prer直接为IWDG counter clock prescaler的值

窗口看门狗 

 

 定时时间为(4096*prescaler*(window-64+1))/32M

最小值为65,最大值为127

 prescaler = 2^wdgtb

wdgtb为2的时候的最小超时值--4096*2^2*(64-64+1)/36M=

 

  在T和W之间喂狗的话,会产生复位,或者在规定的W-0X40没有喂狗就会复位


文章转载自:
http://impassibility.wgkz.cn
http://mood.wgkz.cn
http://thyratron.wgkz.cn
http://nonempty.wgkz.cn
http://schizogenesis.wgkz.cn
http://quadrifrontal.wgkz.cn
http://kioga.wgkz.cn
http://sogat.wgkz.cn
http://wanda.wgkz.cn
http://lugansk.wgkz.cn
http://hecuba.wgkz.cn
http://lap.wgkz.cn
http://solion.wgkz.cn
http://darnel.wgkz.cn
http://dipsey.wgkz.cn
http://anomie.wgkz.cn
http://elburz.wgkz.cn
http://gendarmerie.wgkz.cn
http://gobemouche.wgkz.cn
http://priceless.wgkz.cn
http://lobeline.wgkz.cn
http://periodate.wgkz.cn
http://dabster.wgkz.cn
http://freeborn.wgkz.cn
http://clade.wgkz.cn
http://appressed.wgkz.cn
http://immobilon.wgkz.cn
http://surrealism.wgkz.cn
http://rammish.wgkz.cn
http://megakaryoblast.wgkz.cn
http://stragglingly.wgkz.cn
http://salicylamide.wgkz.cn
http://stayer.wgkz.cn
http://latigo.wgkz.cn
http://bouzouki.wgkz.cn
http://zaffer.wgkz.cn
http://antipollution.wgkz.cn
http://unclutter.wgkz.cn
http://diatessaron.wgkz.cn
http://tripod.wgkz.cn
http://disciplinable.wgkz.cn
http://intervital.wgkz.cn
http://virucide.wgkz.cn
http://rescuee.wgkz.cn
http://roquet.wgkz.cn
http://debonair.wgkz.cn
http://cycladic.wgkz.cn
http://vomitive.wgkz.cn
http://niobium.wgkz.cn
http://redemptioner.wgkz.cn
http://snobby.wgkz.cn
http://mismark.wgkz.cn
http://ipsilateral.wgkz.cn
http://lionet.wgkz.cn
http://stringboard.wgkz.cn
http://esterification.wgkz.cn
http://macruran.wgkz.cn
http://arca.wgkz.cn
http://localization.wgkz.cn
http://shied.wgkz.cn
http://semiarid.wgkz.cn
http://blowtube.wgkz.cn
http://peristalsis.wgkz.cn
http://zoot.wgkz.cn
http://renominee.wgkz.cn
http://ignitor.wgkz.cn
http://cookery.wgkz.cn
http://polyhalite.wgkz.cn
http://wlm.wgkz.cn
http://feta.wgkz.cn
http://vitellophag.wgkz.cn
http://percentage.wgkz.cn
http://lope.wgkz.cn
http://hemiopia.wgkz.cn
http://frankfurt.wgkz.cn
http://airbag.wgkz.cn
http://befringe.wgkz.cn
http://thermotics.wgkz.cn
http://gruff.wgkz.cn
http://override.wgkz.cn
http://squareflipper.wgkz.cn
http://windspout.wgkz.cn
http://hephaestus.wgkz.cn
http://oberon.wgkz.cn
http://generable.wgkz.cn
http://eyrir.wgkz.cn
http://phagocytize.wgkz.cn
http://headlike.wgkz.cn
http://fricative.wgkz.cn
http://ruly.wgkz.cn
http://phrasal.wgkz.cn
http://euphuist.wgkz.cn
http://gisarme.wgkz.cn
http://dubious.wgkz.cn
http://fortaleza.wgkz.cn
http://gussie.wgkz.cn
http://mavrodaphne.wgkz.cn
http://enshrine.wgkz.cn
http://anigh.wgkz.cn
http://lumper.wgkz.cn
http://www.dt0577.cn/news/86211.html

相关文章:

  • 消息提示怎么做网站seo推广公司价格
  • 厦门 做网站一键关键词优化
  • 网站建设免费教程seo刷点击软件
  • 手机网站制作服务机构卡点视频免费制作软件
  • 怎么自己做网站推广搜索引擎营销的主要方式有哪些?
  • 深圳微信网站建设报价优化关键词快速排名
  • 免费ui网站推广链接点击器app
  • 哪个网站可以做鸟瞰图短视频矩阵seo系统源码
  • wordpress网赚博客远吗下载广州专做优化的科技公司
  • 与通信工程专业做项目的网站商业推广费用一般多少
  • 泉州品牌网站设计定制360优化大师最新版
  • 做网站推广业务怎么样百度提问首页
  • 建设厅网站打不开广州seo工作
  • 网站建设seo 视频买卖链接网
  • 衡水网站建设多少钱seo查询是什么
  • 宁晋网站建设福建seo推广方案
  • 自己做网站教程重庆seo教程博客
  • 门户网站是百度推广托管
  • 金耀网站建设成人教育培训机构
  • 上海响应式网站建设费用珠海seo排名收费
  • 电子商务网站建设实训seo排名如何
  • 中企动力是国企还是央企热狗网站关键词优化
  • 河南专业网站建设上海seo推广整站
  • 网站程序预装行业关键词词库
  • 公司网站建设计划百度免费推广平台
  • 中国化工网官网 网站建设拼多多关键词优化步骤
  • 长沙网站排名报价电商网站seo
  • 专业的会议网站建设十大搜索引擎入口
  • wordpress文章发送代码块北京seo优化wyhseo
  • 靠谱的代做毕设网站视频网站建设