自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 【智能家居项目】基本功能配置

使用static修饰的函数具有内部链接属性,只能在当前文件中调用,其他文件无法调用。PC主机与ARM开发板有通信连接/PC主机运行ARM的某种程序:ARM写入后,触发异常SVC,主机读取异常,再打印出来。3)使用外部文件定义的函数,要么include其头文件,要么使用extern外部变量,优先声明该函数。1)如何用HAL移植:新建HAL模板,移植到原函数,记得添加外设文件,使能宏,包含头文件,初始化。禁用半主机模式,需移除相关函数,复杂,若无需要,不推荐使用。5)按键读函数,why?0)结构体 指针数组。

2024-04-24 14:49:33 261

原创 【智能家居项目】工程文件移植(需补充)

6.使用外设时:观察:是否配备外设.c文件,是否在conf.h中使能宏定义,是否添加include头文件,是否初始化正确。0.按键 软件消抖 延时 二次判断,缺点 过于灵敏/迟钝——改进:定时器TIM中断消抖。5.Keil系统配置:C/C++全局定义宏,添加编译路径。7.main.h需自行创建,并包含指定头文件。4.在Keil中新建工程,添加文件。2.在STM系统固件包中进行移植。1.自行创建工程文件夹分类。3.具体移植文件看视频。

2024-04-23 14:38:26 152

原创 【智能家居项目】RTOS正式引入

1.明确任务量:5个Task+1个识别任务(读取定时器任务标志)=共6个任务。3.更改定时器,因用RTOS则不可使用SysTick,随便更改一个TIM。4.更改优先级大小,根据RTOS要求(看弹出框提示),需 ≥5。0.不同时长的任务 引入枚举类型+按位分析。

2024-04-22 10:36:36 143

原创 【智能家居项目】RTOS初步(3)轮询与事件驱动的组合

2) 在while中执行,开关定时器和控制LED亮灭,如果关闭定时器,则串口打印不执行。2)main函数,while串口打印TIM轮询,若按键中断关闭TIM,则串口不显示。2.事件驱动:增加按键中断,使其控制定时器的开关,同时控制LED亮灭。1.实验一:轮询按键中断标志,在主函数中控制定时器开关和LED亮灭。2.实验二:在按键中断服务中控制定时器开关和LED亮灭。1.轮询:定时器 不同时间 处理 不同任务 ,引出标志位,将中断函数中的处理提到主函数执行。1)增加LED输出配置(默认不亮),其余默认。

2024-04-20 14:36:20 171

原创 【智能家居项目】RTOS初步(2)——中断嵌套

TIM的中断对SysTick有影响:每隔1ms,SysTick和TIM均会产生中断,但SysTick的中断优先级为7,所以一直都只执行TIM2的中断,不执行SysTick的中断;改进方法:降低TIM的频率,改为10ms产生一次中断,但无论如何,仍存在bug。在tim.c、gpio.c初始化,在it.c内有中断服务函数。2.定时器TIM2先触发(0,1),外部按键中断后触发(1,1)4.while函数为空,等待中断的发生即可,串口打印显示。1.实现内部时钟中断+外部按键中断,并进行中断嵌套。

2024-04-20 13:17:53 176

原创 【STM32基础】外部中断

EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。2.中断服务函数+中断标志位:一般为确保中断确实发生,我们会在中断服务函数调用中断标志位状态读取函数读取外设中断 标志位并判断标志位状态。3)处中断正确信号 与 中断屏蔽信号 相与,中断屏蔽信号为1,方为真的可以产生中断,可以控制 EXTI_IMR 来实现是否产生中断的目的。软件中断寄存器 (EXTI_SWIER允许通过程序控制就可以启动中断/事件线 ), 或 外部中断,有其一即可 产生中断正确信号。

2024-04-19 22:07:16 423

原创 【STM32基础】中断

4.在Cortex-M3中,将优先级拆分为抢占优先级(Preempt Priority)和子优先级(Subpriority),每个中断都需要指定这两级,具有高优先级的中断可以打断低优先级的中断,实现中断嵌套。6.总结中断是否会优先执行依据:首先是抢占先式优先级等级,其次是子优先级等级,只有抢占优先级才可能出现中断嵌套。若选择的是3bit用来区分抢占优先级、1bit用来区分响应优先级,则抢占优先级可以选择为0~7,响应优先级可以选择为0~1;4.调用该中断跳转的中断回调函数,编写中断服务函数,不可太复杂。

2024-04-19 17:36:19 328

原创 【智能家居项目】RTOS初步(1)——中断基础

内含 __weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 中断回调函数,在内写操作。5.void EXTI0_IRQHandler(void) void EXTI4_IRQHandler(void) 中断服务函数。共用HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);GPIO外部中断处理函数。2.事件 中断 驱动方式,中断服务函数尽量不处理复杂事情。3.三行按键法不用中断 是否均适用?

2024-04-19 10:59:32 206

原创 【智能家居项目】代码实现

(3)向ESP8266发送AT指令,并观察返回值,在串口给出反馈,注意,新定义的数组buf可同时用作AT指令的发送和接收,因为时间可错开。(2) 基础串口函数,发送接收的数据,需引出中介值,数组指针*pdata,在之后的main函数中调用接收函数有用。(1)读写重定向,用于串口输出printf与读入getchar,记得使用MicoLib。TCP:先发一个指令(固定ID号0),发送成功后再发送指令自定义长度的数据。2.再在模块.h声明。1.基本串口代码(usart.c)基本顺序:1.先写模块.c,

2024-04-19 10:01:49 258 1

原创 【无标题】

之后更改的占空比可在程序内设定中断,操作寄存器改变TIM2->ARR变周期,TIM2->CCR2变占空比。4.在附属.c文件创建的函数一定要在头文件中声明,如:void Key_Read(void);3.u8等定义在lcd.h中,需设变量可用#include "lcd.h"6.浮点数操作,乘以10倍以上变为整数操作,最后显示再转换为浮点数。3)据题设定波特率 9600,其余默认即可。5.++操作有最大值限制,两方法:1.取余。2)防止数据覆盖问题,多敲几个空格在后。生成代码后,记得添加lcd.c。

2024-04-18 12:25:28 353

原创 COM注意事项

6.串口: 函数头 初始化串口 开启串口中断 重定向fputc 串口接收函数 串口重定向 根据要求:串口接收判断函数 串口数据处理函数 串口回调函数,最后重新开启串口。led点亮 led熄灭 led闪烁定时 led 0x01?1.ADC_Process()——while,注意优先确定是否初始化。打印百分号需两个%%1.加上lcd.c,#include . h。3.key.c key.h 按键消抖+读取。2.pwm手动更改占空比和频率。7.系统计时 SysTick。5.第一步 先搭界面框架。

2024-04-09 18:37:37 137 1

原创 STM32Cubemx 部分外设初始化

1)ADC输入模式:ADC_IN15,两通道,R37_PB15或R38_PB12。2)调用IIC的初始化函数+include.h(Cube未配置的都需自行初始化)配置:1)ADC输入模式:ADC_IN15,两通道,R37_PB15+R38_PB12。1)无需配置Cubemx,直接加入iic.c.h文件。3)在iic.c编写读写EEPROM编程。2)key.c.h自行编写 三行按键法。2)设置相关通道为单通道,其余默认。引申:MPC4017的EEPROM读写函数,编程:1)1.初始化+include。

2024-04-01 22:21:00 289

原创 项目COM_20复盘

5.工程加入:lcd.c,iic.c(EEPROM需用),#include "stdio.h"(用于printf函数)1)判断参数是否合理,设置比较变量,将参数值与此变量比较,若合理则赋值该比较变量,否则用原始比较变量。2.涉及到浮点数的比较作为条件判断,尽量优先设为(整数/10),防止精度问题。3.ADC采集:PB15:ADC2_IN15,设置单通道模式,其余默认。2.按键:PA0\PB0\PB1\PB2:GPIO_Input。设置采集变量+三行代码(开启,采集,转换),直接写在main的模块函数中。

2024-04-01 22:19:59 146

原创 【智能家居项目】工程初始化

1.推挽输出(Out Push Pull):由PMOS和NMOS控制,输出高低电平,有不同的MOS导通直连VDD或VSS,增加控制端口对GPIO口的电流,即驱动能力增大。4)中断函数调用至回调函数,回调函数自行编写,在对应的.c文件中(如按键则编写在gpio.c),或者编写在main.c也可。上拉和下拉输入:在输入IO口后接上下拉电阻,若无输入,则为上\下拉,有输入,则反之?浮空输入:IO口直接肖特基触发器(模拟转为数字量),外部输入不确定,(0-max v均有可能)2)NVIC中使能中断线,调整优先级。

2024-04-01 12:11:36 754

原创 项目COM_21复盘

1.Undefined symbol Key_Read (referred from main.o).——>未定义,看是否include.h,工程文件是否已添加.c。2)注意题目逻辑,是切换到某个界面之后,该按键按下才有反应,所以需优先if判断是否为相应界面。4)设定界面参数:u16 freq,float vol_r37,注意题目要求的初始化条件。0)优先问:添加.c.h了吗?3.初始化完成后,复制一份作模板,用于配置cube,后续再移植到原工程里。3.注意题目要求,显示函数 需要空多少格,显示多少位,

2024-03-26 12:46:40 368

原创 项目COM_22复盘

布尔类型,用于表示真(true)或假(false)的值。3)编写LED_Process();运用于while(1)中,内调用led.control函数。5)根据实际需求在其他函数内调用EEPROM_Read();1)加入i2c.c(原名为i2c_hal.c/h),改名,注意.c中的include也要改。3)再i2c.c中编写 读写EEPROM函数,写完后记得在i2c.h中声明。4)编写I2C初始化Read函数,此函数放main的初始化内。1)手动编写led.c、led.h。

2024-03-22 17:13:05 98 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除