基于ARM内核的智能手环(day1)

2024-03-30 23:20
文章标签 智能 内核 day1 arm 手环

本文主要是介绍基于ARM内核的智能手环(day1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


整体介绍

智能手环由 ARM 内核 MCU(Cortex-M 系列)、TFTLCD 屏、温湿度传感器、心率传感器、

加速度传感器等主要几部分构成。该平台硬件采用 STM32 芯片,通过对温湿度传感器的驱动编写,获取周围温湿度数据,并在 LCD 屏显示,通过对心率传感器对人体心率的采集,获取实时心率值,并在 LCD 屏绘制心率曲线图以及心率值,通过对加速度传感器对人体运动数据进行采集,结合计步算法,计算出人所走的步数,并在 LCD 屏显示,同时可以通过 RTC 记录当前时间,并在 LCD 屏显示时间以及电子数字时钟。

背景

项目名称:智能手环

项目背景: 智能手环诞生之初是为了能够记录人们的运动情况,监测用户的健康状况,以期培养健康而科学的运动和生活习惯。随着产品的优化和升级,智能手环的监测功能逐步延伸到能够对用户的活动、锻炼、心率监控等进行持续性地监测和反馈。

image-20240325214928343

项目架构

智能手环由 ARM 内核 MCU(Cortex-M 系列)、TFTLCD 屏、温湿度传感器、心率传感器、

加速度传感器等主要几部分构成。该平台硬件采用 STM32 芯片,通过对温湿度传感器的驱动编写,获取周围温湿度数据,并在 LCD 屏显示,通过对心率传感器对人体心率的采集,获取实时心率值,并在 LCD 屏绘制心率曲线图以及心率值,通过对加速度传感器对人体运动数据进行采集,结合计步算法,计算出人所走的步数,并在 LCD 屏显示,同时可以通过 RTC 记录当前时间,并在 LCD 屏显示时间以及电子数字时钟。

需要实现的功能

GPIO口点灯、按键检测、非阻塞轮询、串口通信、LCD、温湿度传感器、ADC、RTC、心率传感器、加速度传感器

产品开发流程

  1. 项目是怎么来的?

    • 竞品调研

    • 市场调研

  2. 产品的立项(项目经理/老板)

  3. 项目的研发

    硬件研发:原理板的绘制、PCB板、焊接

    软件研发:配合硬件工程师实现对应的功能

  4. 产品的测试

    硬件测试:产品使用次数上限、零部件的损耗速率

    软件测试:修改BUG

  5. 产品的售后服务

    产品的升级和BUG的修复

嵌入式

什么是嵌入式?

嵌入式系统,从客户需求出发,灵活裁剪软硬件的现代计算机技术

嵌入式应用领域

image-20240325215037202

image-20240325094352905

MCU

微型控制单元

单片机

微型计算机

image-20240325215046965

单片机的厂商

ST意法半导体 NXP恩智浦 德州仪器

兆易创新GD32 乐鑫科技ESP32

STM32

内存更大,接口更丰富,市场占有量大

ST 意法半导体

M ARM公司 M3

32位

STM32内部结构

查手册

image-20240325215101114

环境搭建

编写代码:用C语言写代码

编译代码:编译成可执行代码

image-20240325110137822

见pdf

项目源码

image-20240325145709519

lib 库

project 自动创建

startup 项目启动文件

user 用户—main.c,main.h

api 接口文件

芯片类型

STM32F103ZET6

项目开发的三种方式

  1. 寄存器:位操作
  2. 标准库、固件库:技术成熟(已经不再更新)
  3. HAL库:图形化开发

LED灯与GPIO口

led灯能干啥?

状态指示灯

看原理图,找到对应的引脚

image-20240325160714163

绿色LED1叫网络标号

网络标号:相同的网络标号是练习在一起的

image-20240325161218173

GPIO口命名规则:

通用输入输出的规则

P:port(端口)

E:A B C…端口号

2:0~15 (16)端口位

GPIO口的模式:

image-20240325161732220

image-20240325161900451

IO口在最右边

VDD是内部电源:3.3V

锯齿状:电阻

开关闭合,内部接电源,上拉

机器只能识别0和1

电压值:模拟量

数字量:0 1

所以我们规定

0:0V

1:2.5-5V

VSS:内部地

开关闭合为下拉

如果没有上拉和下拉,就是浮空数

image-20240325163056792

两个输出源

如果从输出数据寄存器输出,叫通用输出

片上外设:复用输出

推挽可以输出输出

开漏只能输出0

  • 输入模式:

    1. 上拉输入:默认输入高电平

    2. 下拉输入:默认输入低电平

    3. 浮空输入:没有上下拉

    4. 模拟输入:ADC

  • 输出模式:

    1. 推挽输出:0 1
    2. 开漏输出:不能通过自身输出高电平信号
    3. 复用推挽
    4. 复用开漏

所以我们控制led灯所用的是输出模式中的推挽输出

PE2 输出 0 灯开

输出1 灯关

找到对应的IO口

LED1 —— PE2

LED2 —— PE3

3.配置IO口模式

PE2 推挽输出

写代码

image-20240325165241423

#include "main.h"  int main(void)
{//LED1 PE2 推挽输出//配置IO口步骤//step1.开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//step2.配置IO口模式GPIO_InitTypeDef	GPIO_InitSTRUCT;GPIO_InitSTRUCT.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitSTRUCT.GPIO_Pin = GPIO_Pin_2;GPIO_InitSTRUCT.GPIO_Speed = GPIO_Speed_50MHz;//step3.初始化IO口GPIO_Init(GPIOE,&GPIO_InitSTRUCT);//PE2输出低电平GPIO_WriteBit(GPIOE,GPIO_Pin_2,Bit_RESET);while(1){}
}

然后输出高低电平即可控制灯的亮灭

GPIO_WriteBit(GPIOE,GPIO_Pin_2,Bit_SET);

那么每次都这样写是不是有点点麻烦

所以我们宏定义一下

#define LED1_ON GPIO_WriteBit(GPIOE,GPIO_Pin_2,Bit_RESET)
#define LED1_OFF GPIO_WriteBit(GPIOE,GPIO_Pin_2,Bit_SET)

这样我们就可以轻松的控制小灯的亮灭了


下一篇笔记我们则会学习如何通过寄存器反转电平状态

这篇关于基于ARM内核的智能手环(day1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862855

相关文章

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重