STM32CubexMX与FreeRTOS学习

news2024/11/26 18:33:00

FreeRTOS结合MX软件开发,基础配置直接生成,我们只需要会操作即可,操作一些API函数,注意事项就是:头文件、二值信号量一开始就有、定时器需要打开并且配置周期

1-LED-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,不然会卡,我也不知道为什么 

 软件定时器 

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

默认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");
     else
         printf("get fail\r\n");
    
         
 if(KeyNum == WK_UP_PRESS)
       if( xSemaphoreTake( myBinarySem01Handle, ( TickType_t ) 0 ) == pdTRUE )
        //获取成功
         printf("get suceess2\r\n");
        else
            printf("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://www.coloradmin.cn/o/384838.html

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

相关文章

Elasticsearch:如何在 Elastic 中实现图片相似度搜索

作者:Radovan Ondas 在本文章,我们将了解如何通过几个步骤在 Elastic 中实施相似图像搜索。 开始设置应用程序环境,然后导入 NLP 模型,最后完成为你的图像集生成嵌入。 Elastic 图像相似性搜索概览 >> 如何设置环境 第一步…

【11】linux命令每日分享——useradd添加用户

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

网页全屏截图、在线截图API

在我们的数字时代,网页截图已经成为了一个非常常见的需求,无论是为了记录网页信息、保存重要信息或是与他人分享自己看到的内容,截图工具都是必不可少的。今天,我想向大家推荐一个非常好用的在线网页全屏截图工具,它的…

获取html元素相对屏幕的位置

1. 写在前面 Javascript 由三部分构成,ECMAScript,DOM和BOM。 ECMAScript(核心)   描述了JS的语法和基本对象 Bom:(browser object model);浏览器对象模型,提供一些属性和方法可以操作浏览器,浏览器可…

【spring】Spring Data --Spring Data JPA

Spring Data 的委托是为数据访问提供熟悉且符合 Spring 的编程模型,同时仍保留着相关数据存储的特​​殊特征。 它使使用数据访问技术、关系和非关系数据库、map-reduce 框架和基于云的数据服务变得容易。这是一个伞形项目,其中包含许多特定于给定数据库…

详述java的设计模式(二)

1.工厂模式 简单工厂模式(Simple Factory Pattern)属于创建型模式,是指由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的对象,而被创建的对象通常都具有共同的父类或接口,这种模式又叫做静态工…

数据结构和算法学习

文章目录精通一个领域切题四件套算法算法的五个条件流程图数据结构数据与信息数据信息数据结构和算法数据结构算法时间复杂度空间复杂度数组 Array优点缺点数组和链表的区别时间复杂度链表 Linked List优点缺点时间复杂度单向链表双向链表循环链表双向循环链表堆栈 Stack队列 Q…

涂鸦开发资源中心硬核上线!支持产物包可视化、自由裁剪开发框架等功能

开发过程对于程序猿们来说,就像建碉堡,碉堡的建成速度、创造力,以及精致和牢固程度,取决于工具称不称手。不称手的开发工具,不仅能让人心力交瘁,还会多掉几根头发。 为了帮助开发者获得更好的开发体验&…

【搞透C语言指针】那年我双手插兜, 不知道指针是我的对手

☃️内容专栏:【C语言】进阶部分 ☃️本文概括: 征服C语言指针!一篇文章搞清楚指针的全部要点。 ☃️本文作者:花香碟自来_ ☃️发布时间:2023.3.3 目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义…

UML常见图的总结

一、概述 UML:Unified Modeling Language,统一建模语言,支持从需求分析开始的软件开发的全过程。是一个支持模型化和软件系统开发的图形化语言、为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到…

ESP32设备驱动-SHT11温度湿度传感器驱动

SHT11温度湿度传感器驱动 SHT1x 数字湿度传感器是一种可回流焊接的传感器。 SHT1x 系列包括带有 SHT10 湿度传感器的低成本版本、带有 SHT11 湿度传感器的标准版本和带有 SHT15 湿度传感器的高端版本。 与 SHTxx 湿度传感器系列中的所有其他 Sensirion 传感器类型一样,它们经…

H2数据库连接时用户密码错误:Wrong user name or password [28000-214] 28000/28000 (Help)

H2数据库连接时用户密码错误: 2023-03-03 08:25:07 database: wrong user or password; user: "SA" org.h2.message.DbException: Wrong user name or password [28000-214]出现的问题配置信息原因解决办法org.h2.message.DbException: Wrong user name or password …

Python从入门到转行,看完这一篇就够了

Python零基础入门 零基础入门就得从最基本的变量,语法格式,数据类型,函数,作用域,模块等基本知识入手(有编程基础基础也得这么来) 和篮球一样,先来三步上篮: Python基…

Spring Boot 分片上传、断点续传、大文件上传、秒传

文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,…

MySQL面试题-基础篇

目录 前言 数据库基础 1.什么是关系型数据库和非关系型数据库? 2.什么是 SQL? 3.MySQL 有什么优点? 4.MySQL 的基础架构? 存储引擎 1.MySQL 支持哪些存储引擎?默认使用哪个? 2.MySQL 存储引擎架构了解吗&…

C# IoC控制反转学习笔记

一、什么是IOC IoC-Invertion of Control,即控制反转,是一种程序设计思想。 先初步了解几个概念: 依赖(Dependency):就是有联系,表示一个类依赖于另一个类。 依赖倒置原则(DIP&a…

苹果ipa软件下载网站和软件的汇总

随着时间的流逝,做苹果版软件安装包下载网站和软件的渐渐多了起来。 当然,已经关站、停运、下架、倒闭的苹果软件下载网站和软件我就不说了,也不必多说那些关站停运下架倒闭的网站和软件了。 下面我统计介绍的就是苹果软件安装包下载网站和软…

系列十二、MySQL管理

一、系统数据库 Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下:二、常用工具 2.1、mysql 2.1.1、概述 该mysql不是指mysql服务,而是指mysql的客户端工具。 2.1.2、语法 # 语法 : mysql [options] [dat…

分库分表、分库分表带来的问题

文章目录1.分库垂直分库水平分库2.分表垂直分表水平分表3.水平分表的路由方式(1)范围路由(2)Hash 路由4.分库分表带来的问题分库(1)事务的问题注意(2)跨库 JOIN 问题分表&#xff08…

k8s-故障转移 livenessProbe readinessProbe 学习总结

k8s-故障转移学习总结 大纲 概念K8S中Pod健康检查livenessProbe & readinessProbelivenessProbe 存活探测实例readinessProbe 就绪探测实例 概念 故障转移有哪些情况 物理机故障程序故障 在计算机术语中,故障转移(英语:failover&am…