自用---

news2025/6/26 9:49:51

零、环境配置

keil代码补全

keil pack包

cubemx配置安装包

一、LED

cubemx配置PD2引脚为输出模式

uint16_t led_value = 0x00;
void led_set(uint8_t led_dis)
{
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOC,led_dis<<8,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);    
}
void led_single_on(uint8_t turn)
{
    led_value = led_value | (0x01<<(turn - 1));
    led_set(led_value);
}
void led_single_off(uint8_t turn)
{
    led_value = led_value & (~(0x01<<(turn - 1)));
    led_set(led_value);
}

void led_single_on(uint8_t turn);
void led_single_off(uint8_t turn);

通过位运算实现单独的led操作而不影响其他led灯的正常显示,便于实现led的同时闪烁和分别控制,成功解决和led灯冲突的问题

二、EPPEROM(I2C)

初始化

初始化函数【无需在cubemx配置引脚】,在while(1)前面初始化配置一下🆗,下面这个函数在提供的I2C函数里有

void I2CInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    GPIO_InitStructure.Pin = GPIO_PIN_7 | GPIO_PIN_6;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull = GPIO_PULLUP;
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
}

 EEPROM--AT24C02只有对写操作有时间间隔要求,对读操作没有间隔要求

由上图可以得知,AT24C02读时间间隔为5ms

HAL_Delay(5);    //延时5ms--AT24C02写时序要求

 根据芯片手册时序图编写读写函数

//字节写函数
void at24c02_Byte_Write(unsigned char addr,unsigned char cSendByte)
{
    I2CStart();
    I2CSendByte(0xa0);
    I2CWaitAck();
    I2CSendByte(addr);
    I2CWaitAck();
    I2CSendByte(cSendByte);
    I2CWaitAck();
    I2CStop();
}

//随机读
unsigned char at24c02_Byte_read(unsigned char addr)
{
    unsigned char dat;
    I2CStart();
    I2CSendByte(0xa0);
    I2CWaitAck();
    I2CSendByte(addr);
    I2CWaitAck();
    I2CStart();
    I2CSendByte(0xa1);
    I2CWaitAck();
    dat = I2CReceiveByte();
    I2CSendNotAck();
    I2CStop();
    return dat;
}

三、LCD

1.LCD基本显示问题

#include "stdio.h"  //进入sprintf函数的头文件

sprintf () 可以将格式化输出发送到一个字符串中

使用示例:

        sprintf(text,"    Liquid Level     ");
        LCD_DisplayStringLine(Line1,(u8*)text);

2.高亮某一行 

        if(set_sel == Sel_3){
            LCD_SetBackColor(Yellow);
        }
        sprintf(text," Threshold_3:  %2dcm     ",Threshold_3);
        LCD_DisplayStringLine(Line7,(u8*)text);      
        LCD_SetBackColor(Black);    

 设置set_sel用于选择高亮的某一行

在显示前设置高亮背景颜色

在显示后设置回默认的背景颜色

3.高亮某个字符

void highlight(uint8_t *str,uint8_t pos)
{
	int i = 0;
	for(i = 0; i <= 20; i++)
	{
		if(i != pos && i!= (pos+1))
			LCD_DisplayChar(Line3,(320 - (16 * i)),str[i]);
	}
	LCD_SetBackColor(Yellow);
	LCD_DisplayChar(Line3,(320 - (16 * pos)),str[pos]);
    LCD_SetBackColor(Yellow);
    LCD_DisplayChar(Line3,(320 - (16 * (pos+1))),str[pos+1]);
	LCD_SetBackColor(Black);	
}

使用示例:

四、串口

1.串口重定向

#include "stdio.h"
int fputc(int ch,FILE *f)
{
    HAL_UART_Transmit(&huart1,(unsigned char*)&ch,1,50);
    return ch;
}

 

2.串口中断

3.串口DMA

4.不定长数据接收

5.指令解析

6.sscanf的使用

五、TIM

1.PWM输出(多通道脉冲输出/信号发生器)

  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);  //PA6--PWM输出
  HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1); //PA7--PWM输出

2.PWM占空比

①初始化配置

②修改比较值

__HAL_TIM_SetCompare(    );

3.PWM频率设置

__HAL_TIM_SET_PRESCALER(&htim2,80-1);

4.输入捕获,双通道测量频率和占空比

    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
uint16_t cnt_rising=0, cnt_falling=0;
uint16_t freq=0;
float IC_duty;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim -> Instance == TIM3)
	{
		if(htim -> Channel == HAL_TIM_ACTIVE_CHANNEL_2)
		{
			cnt_rising = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2)+1;
			freq = (80000000/80) / cnt_rising;
			IC_duty = ((float)cnt_falling/cnt_rising)*100;
		}
		if(htim -> Channel == HAL_TIM_ACTIVE_CHANNEL_1)
		{
			cnt_falling = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1)+1;
		}
	}
}

5.RTC时钟

6.定时器实现闪烁/步进

六、按键

短按

长按+短按

按键处理函数

七、ADC(电位器)

ADC校准

HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);        //ADC校准

ADC读取值

勾选ADC2  IN15 Single-ended,其他选项默认

HAL_ADC_Start(&hadc2);
HAL_ADC_GetValue(&hadc2);
double getADCvalue(void)
{
    HAL_ADC_Start(&hadc2);
    HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);        //ADC校准
    uint32_t value = HAL_ADC_GetValue(&hadc2);
    ADC_get_flag = 0;
    return (value*3.3)/4095.0;
}

4095——>分辨率12bit   

过采样(G4系列)

Oversampling Right Shift和Oversampling Ratio设置为对应的。

double getADCvalue(void)
{
    HAL_ADC_Start(&hadc2);
    HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);        //ADC校准
    uint32_t value = HAL_ADC_GetValue(&hadc2);
    ADC_get_flag = 0;
    return (value*3.3)/4095.0;
}

 

硬件滤波

软件滤波(一阶互补滤波)

double first_filter(double new_val,double old_val,float rate)
{
    return  (new_val*rate + old_val*(1-rate)); 
}

八、考试调试

①printf

②LCD

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

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

相关文章

Node.js cnpm的安装

百度搜索 cnpm,进入npmmirror 镜像站https://npmmirror.com/ cmd窗口输入 npm install -g cnpm --registryhttps://registry.npmmirror.com

Pytorch官方FlashAttention速度测试

在Pytorch的2.2版本更新文档中&#xff0c;官方重点强调了通过实现FlashAtteneion-v2实现了对scaled_dot_product_attention约2X左右的加速。 今天抽空亲自试了下&#xff0c;看看加速效果是否如官方所说。测试前需要将Pytorch的版本更新到2.2及以上&#xff0c;下面是测试代码…

【opencv】示例-facial_features.cpp 使用Haarcascade分类器检测面部特征点

// 包含OpenCV库中有关对象检测的头文件 #include "opencv2/objdetect.hpp" // 包含OpenCV库中有关高层GUI函数的头文件 #include "opencv2/highgui.hpp" // 包含OpenCV库中有关图片处理的头文件 #include "opencv2/imgproc.hpp"// 包含输入输出…

Vue的学习之旅-part6-循环的集中写法与ES6增强语法

Vue的学习之旅-循环的集中写法与ES6增强语法 vue中的几种循环写法for循环for in 循环 for(let i in data){}for of 循环 for(let item of data){}reduce() 遍历 reduce( function( preValue, item){} , 0 ) ES6增强写法 类似语法糖简写对象简写函数简写 动态组件中使用 <kee…

Web漏洞-文件上传之内容逻辑数组

图片一句话制作方法&#xff1a; copy 1.png /b shell.php /a webshell.jpg 具体示例见upload-labs 的14-17 二次渲染----见Pass-18 用/.或者%00绕过&#xff1a;Pass-20----Pass-21 CVE-2017-12615复现 创好环境后打开环境&#xff0c;再访问ip8080 抓包发送数据 Shell的…

M1 Flutter SDK的安装和环境配置

前言 作为iOS 开发&#xff0c;观望了许久的Flutter &#xff0c;还是对它下手了&#xff0c;不是故意要卷&#xff0c;没办法工作需要&#xff01;既然要学Flutter&#xff0c;首先就得配置Flutter的相关环境&#xff0c;由于我的是M1 芯片的电脑&#xff0c;记录下来配置过程…

四川古力未来科技抖音小店:安全守护,购物无忧

在当下数字化浪潮席卷全球的背景下&#xff0c;电商行业迎来了前所未有的发展机遇。四川古力未来科技抖音小店作为新兴的电商力量&#xff0c;以其独特的魅力和强大的安全保障措施&#xff0c;赢得了广大消费者的青睐和信任。本文将深入探讨四川古力未来科技抖音小店在安全方面…

java+saas模式医院云HIS系统源码Java+Spring+MySQL + MyCat融合BS版电子病历系统,支持电子病历四级

javasaas模式医院云HIS系统源码JavaSpringMySQL MyCat融合BS版电子病历系统&#xff0c;支持电子病历四级 云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务&#xff0c;提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之八 简单视频素描效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之八 简单视频素描效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之八 简单视频素描效果 一、简单介绍 二、简单指定视频某片段快放效果实现原理 三、简单指定视频某…

盲人出行新篇章:一款悄然改变生活的盲人导航应用

作为一名资深记者&#xff0c;我始终关注并报道那些以科技创新改善特殊群体生活质量的故事。近期&#xff0c;一款名为蝙蝠避障的专业盲人导航辅助工具引起了我的关注。它凭借独树一帜的避障技术&#xff0c;悄然间为视障群体的独立出行开启了全新篇章&#xff0c;带来了显著且…

HarmonyOS实战开发-本示例模拟倒计时场景,如何实现振动。

介绍 本示例模拟倒计时场景&#xff0c;通过ohos.vibrator 等接口来实现振动。 效果预览 使用说明 1.点击倒计时文本&#xff0c;弹出时间选择框&#xff0c;选择任意时间&#xff0c;点击确认&#xff0c;倒计时文本显示选择的时间。 2.点击start&#xff0c;开始倒计时&a…

【JavaEE初阶系列】——网络初识—TCP/IP五层网络模型

目录 &#x1f6a9;网络的发展史 &#x1f388;局域网LAN &#x1f388;广域网WAN &#x1f6a9;网络通信基础 &#x1f388;IP地址 &#x1f388;端口号 &#x1f388;协议类型 &#x1f388;五元组 &#x1f6a9;协议分层 &#x1f388;什么是协议分层 &#x…

查看TensorFlow已训模型的结构和网络参数

文章目录 概要流程 概要 通过以下实例&#xff0c;你将学会如何查看神经网络结构并打印出训练参数。 流程 准备一个简易的二分类数据集&#xff0c;并编写一个单层的神经网络 train_data np.array([[1, 2, 3, 4, 5], [7, 7, 2, 4, 10], [1, 9, 3, 6, 5], [6, 7, 8, 9, 10]]…

【opencv】示例-essential_mat_reconstr.cpp 从两幅图像中恢复3D场景的几何信息

导入OpenCV的calib3d, highgui, imgproc模块以及C的vector, iostream, fstream库。定义了getError2EpipLines函数&#xff0c;这个函数用来计算两组点相对于F矩阵&#xff08;基础矩阵&#xff09;的投影误差。定义了sgn函数&#xff0c;用于返回一个双精度浮点数的符号。定义了…

SQLite超详细的编译时选项(十六)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite数据库文件格式&#xff08;十五&#xff09; 下一篇&#xff1a;SQLite 在Android安装与定制方案&#xff08;十七&#xff09; 1. 概述 对于大多数目的&#xff0c;SQLite可以使用默认的 编译选项。但是…

2.HTML常用标签之表单标签

1.HTML常用标签之表单标签 w3c所有标签列表 HTML常用标签之表单标签

结合 tensorflow.js 、opencv.js 与 Ant Design 创建美观且高性能的人脸动捕组件并发布到InsCode

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js 使用 opencv.js 将人脸…

【STM32篇】DRV8425驱动步进电机

【STM32篇】4988驱动步进电机_hr4988-CSDN博客 在上篇文章中使用了HR4988实现了步进电机的驱动&#xff0c;在实际运用过程&#xff0c;HR4988或者A4988驱动步进电机会存在电机噪音太大的现象。本次将向各位友友介绍一个驱动简单且非常静音的一款步进电机驱动IC。 1.DRV8425简介…

苹果开发者后台添加udid后,xcode中 Devices 数量没有更新问题

删除 文件夹 /Users/…/Library/MobileDevice/Provisioning Profiles 如何打开&#xff1a;https://zhuanlan.zhihu.com/p/563928113 回到Xcode刷新包名下面的警告验证&#xff08;可能需要翻墙&#xff09; 完毕&#xff01;

Java异常处理机制详解:多层方法调用与异常传播(day23)

1.数组下标越界 2.多个处理异常 上面这两个代码的区别就是有无 System.out.println("抛出了NumberFormatException"); System.out.println("抛出了ArrayIndexOutOfBoundsException"); 第一种是不论捕获到哪种异常&#xff0c;都只会调用e.printStack…