赞
踩
写在前面的一些话:
博主在发布该系列的时候还只是个大一新生(
所以如果你和此时的我一样,零基础但对嵌入式或者人工智能感兴趣,
不妨把这个系列当做一个小小的入门指南,
其中完整记录了基于python和stm32实现手势点灯的一个小项目
你可以在此过程中:了解stm32的相关知识,并一窥图像处理和卷积神经网络
再次重复:对新手极度友好!!非常基础!两个月从零开始都可以!
在此之前你只需掌握:
熟练掌握C语言,python的基础语法和配anaconda的虚拟环境+会下载库即可
欢迎你跟随我的脚步,一起入坑(bushi)嵌入式和人工智能哦٩(๑>◡<๑)۶
tis:硬件部分强烈推荐跟随【STM32入门教程-2023版 细致讲解 中文字幕】学习,以下是我的一些笔记
英语直译为:微小控制单元集合,从直译可以看出单片机可以被理解为一个小型电脑,集成了CPU(处理器核心)、存储器、输入/输出接口和其他外设的整体系统。其优点在于小体积、低功耗
STMicroelectronics(意法半导体,一个公司)推出的32位ARM Cortex-M(内核,CPU)系列微控制器产品系列(也是是单片机)
与主芯片相连并为其提供特定功能的电子组件或模块,与主芯片通过各种接口进行连接,例如串行接口(SPI)、并行接口(GPIO)、通用串行总线(USB)、音频接口(I2S)、摄像头接口(MIPI)等
用于连接和控制各种外部设备(很好理解),其可以被配置为并行操作
直接存储器访问,一种数据传输技术,可实现外设和内存之间的直接数据传输,减轻CPU的负担,提高系统效率
二者用于数字信号和模拟信号间的转化
模拟信号转化为数字信号便于单片机分析,数字信号转化为模拟信号用于输出至外部设备
通常由一个或多个计数器组成,可以倒计时、计时间隔和生成周期性中断
用于生成精确的定时事件、测量时间间隔和产生PWM信号(脉冲信号。。协助实现数字模拟信号转换)
通常包含一个独立的时钟源(比如晶振),可以在系统断电或关机的情况下继续计时
用于提供精确的时间和日期信息
安全数字输入/输出接口,用于与SD卡或SD存储器进行通信
用于连接计算机和外部设备,实现数据传输和设备通信
类似于单行道,完全禁止另一方向的车辆通行
类似于乡间小道,同一时刻只能让一辆小车通过,另一方向来的车只能等待道路空出来时才能通过
类似于一个双向车道,两个方向上的车流互不相干
通信中通常双方会统一规定在时钟信号的上升沿或下降沿对数据进行采样
直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据
通过总线连接多个节点进行通信的网络协议
类似于多台电脑连接在一个路由器上实现上网
一种同步串行通信协议,可提供非常高速的全双工通信
一种简单的双向两线制总线协议标准
tis:这一部分要学会翻芯片的手册哦O(∩_∩)O
三根总线:icode/ibus(指令总线,用于指令传输)、Dcode/Dbus(数据总线,传输常量和调试参数)、System(系统总线)
AHB:挂载最基本的或性能比较高的外设(复位、时钟控制等基本电路、SDIO)
APB:利用桥接(完成数据转换和缓存)与APB相接;其中APB2性能高于APB1,故一般挂载重要外设(GPIO、ADC/SPI1、TIM1、TIM8等;TIM1、TIM8都是高级定时器)
推挽输入模式(强推输出模式):有较强驱动能力(高低电平均有驱动能力)
P-MOS和N-MOS均有效
数据寄存器为1时:上通下断,输出接VDD(高电平)
数据寄存器为0时:上断下通,输出接VSS(低电平)
开漏输出模式:通信协议的驱动方式(只有低电平有驱动能力)
P-MOS无效,N-MOS有效
数据寄存器为1时:N-MOS断开(输出断开),为高阻模式
数据寄存器为0时:N-MOS导通,接到VSS上 输出低电平
tis:这一部分也可参照GPIO的8种工作模式进行学习哦
#include "stm32f10x.h"
int main(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_13);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
while(1){
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
最常用的三个函数为AHB、APB1、APB2三个(在rcc.h文件的第692-694行)
复位GPIO外设
void GPIO_DeInit(GPIOx)
用结构体的参数来初始化GPIO口(very important!)
定义一个结构体变量->给结构体赋值->调用GPIO_INT函数
Mode:工作模式;Pin:对应引脚;Speed:频率
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//将结构体设置为默认值
GPIO_StructInit(GPIO_InitStruct);
//4个GPIO口的写入函数
GPIO_ReadInputDataBit(GPIOx, GPIO_Pin);
GPIO_ReadInputData(GPIOx);
GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin);
GPIO_ReadOutputData(GPIOx);
//4个GPIO口的输出函数
GPIO_SetBits(GPIOx,GPIO_Pin);//把指定端口设置为高电平
GPIO_ResetBits(GPIOx,GPIO_Pin);//把指定端口设置为低电平
GPIO_WriteBit(GPIOx, GPIO_Pin, BitAction BitVal);//根据第三个参数的值来设定指定的端口
GPIO_Write(GPIOx, PortVal);//同时对16个端口进行写入操作
类似于上述LED闪烁程序,只需将其修改成PC13上的就行啦(感觉很棒。。。)
特别声明:以上的图片部分来自于网络,感谢CSDN、知乎等平台上各位博主的分享,本文用作交流学习予以引用,在此一并表示感谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。