![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32
stm32的学习
C~Tian
CTian
展开
-
STM32-IIC通信(基于AT24C02的软件IIC通信)
IIC是什么?IIC是一种通信是一种由 PHILIPS 公司开发的两线式串行总线。IIC是用来传输数据的,也是一种通信协议。IIC的特点:IIC总线简单而有效,占用的PCB(印制电路板)空间很小,芯片引脚数量少,设计成本低。IIC总线支持多主控(Multi-Mastering)模式,任何能够进行发送和接收的设备都可以成为主设备。主控能够控制数据的传输和时钟频率,在任意时刻只能有一个主控。高速 IIC 总线一般可达 400kbps 以上。IIC的通信时序:I2C 总线在传送数据过程中共有三种类型信原创 2020-10-29 21:02:40 · 1261 阅读 · 0 评论 -
STM32的命名规则(如何根据芯片内部资源去选择一款合适的单片机)
STM32系列单片机的命名规则:大学里常常遇到不知道怎么选单片机的情况,选择大了,造成资源浪费;选择小了,只能在后期更换单片机。这些问题困扰我挺久了,现在我选单片机一般从两个方面考虑:一、以外围器件为参考,二、从芯片的内存资源考虑。比如:需要用几个IO口;外围器件用到什么通信方式,需要几个UART、几个ADC;如果外围器件需要单片机内存情况,如果加外围的储存器件是否能解决;这一款单片机资料是否多,容易查找问题……芯片选型需要对芯片硬件资源及软件编程都有较深的理解,需要有一定的项目经历才能更好更精确地原创 2020-10-24 09:50:15 · 538 阅读 · 0 评论 -
STM32-滴答定时器(SysTick)用作延时函数的时基
本文基于STM32F407ZGT6—————————————滴答定时器(SysTick)的作用:1、作为操作系统时基2、作为精确延时函数时基(delay函数)滴答定时器是一个 24 位的倒计数定时器,当计到 0 时,将从 RELOAD 寄存器中自动重装载定时器初值,只要不把它在 SysTick 控制寄存器以及状态寄存器中的使能位清零,就将永久不息。Cortex‐M3/4 在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。编号为 1-15 的对应系统异常,大于等于 16原创 2020-10-14 20:13:15 · 1600 阅读 · 0 评论 -
STM32-时钟启动的两个寄存器(RCC_CFGR)(PLL_CFGR)的配置
本文基于STM32F407ZGT6—————————————STM32可以使用三种不同的时钟源来驱动系统时钟 (SYSCLK):● HSI 振荡器时钟● HSE 振荡器时钟● 主 PLL (PLL) 时钟器件具有以下两个次级时钟源:● 32 kHz 低速内部 RC (LSI RC),该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用于停机/待机模式下的自动唤醒。● 32.768 kHz 低速外部晶振(LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)下图是STM32库函数中系原创 2020-10-03 16:01:26 · 13536 阅读 · 1 评论 -
从库函数看STM32时钟启动过程
本文基于ST32F407ZGT6编写——————————————时钟系统是单片机的心脏,单片机初始化的第一步就是时钟系统的初始化。本文是基于STM32的库函数对时钟系统启动过程进行分析。启动过程需要了解到的几个汇编语言:IMPORT ,定义表示这是一个外部变量的标号,表示不是在本程序定义的EXPORT ,表示本程序里面用到的变量提供给其他模块调用的。这两个关键字自是告诉编译器变量的来源,相当于C语言里的声明(与extern的作用差不多)LDR 和 STR ——字和无符号字节加载/存储指原创 2020-10-03 10:06:21 · 1392 阅读 · 0 评论 -
STM32中编译工具链的编译宏选择(__CC_ARM、__ICCARM__、__GNUC__、__TASKING__)
在看库函数的时候,我常常看到这样一个语句#if defined ( __CC_ARM )但是我又找不到定义在哪里,网上一查原来这是编译工具链的宏选择。以下博文写得很透彻原文链接:https://www.cnblogs.com/dylancao/p/12306746.htmlSTM32中ARM系列编译工具链的编译宏选择(__CC_ARM、ICCARM、GNUC、TASKING)一 前言在STM32编译中关系到一个选择何种编译宏的问题。这里就梳理一下吧。二 正文1 在 core_cm4.h转载 2020-10-02 17:14:06 · 7595 阅读 · 5 评论 -
STM32-ADC模数转换
本文基于STM32F407ZGT6,适用于绝大部分M3/M4内核的STM32芯片。——————————————————————————————ADC需要的引脚:STM32F4xx 系列般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32-ADC具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 VBAT 通道的信号。16个外部源:两个内部源:对于 STM32F40x 和 STM32F41x 器件,温度传感器内部连接到通道原创 2020-09-27 22:23:45 · 5832 阅读 · 2 评论 -
STM32-UART通信
本文基于STM32F407ZGT6,适用于绝大部分M3/M4内核的STM32芯片。————————————————————————————————USART其实就是一种通信协议,用于进行数据交换。UART与USART:UART:通用异步收发器USART:通用同步异步收发器在单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口可以用于同步串行通讯和异步串行通讯。可以理解UART是USART的剪裁版,只支持异步通信。UART是全双工异步通信,可以同时收发数据。同原创 2020-09-27 11:25:44 · 1505 阅读 · 0 评论 -
SRM32-GPIO_位带操作(3)
本文基于STM32F407ZGT6,适用于绝大部分M3/M4内核的STM32芯片。——————————————————————————————STM32的IO口初始化完毕了,然后我们想进行一个点亮流水灯\打开蜂鸣器这样的操作。很简单,只要把IO口置高电平或低电平即可,我们可以调用STM32的库函数去实现这样的操作。可以实现该功能的库函数有五个:void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//设置某一个GPIO口为高电平voi原创 2020-09-26 21:37:14 · 632 阅读 · 0 评论 -
STM32-GPIO_库函数版(2)
本文基于STM32F407ZGT6,适用于绝大部分M3/M4内核的STM32芯片。———————————————————————————————通过STM32 库开发者可调用这些函数接口来配置STM32 的寄存器,使用库函数开发人员得以脱离最底层的寄存器操作(不用天天去查中文参考手册,只需要知道需要配置哪些寄存器,然后直接在库种调用即可),使用库函数开发有开发快速、可移植性高、代码易懂等优点。使用库函数开发STM32是上上之选。关于STM32的GPIO口的寄存器相关操作可看博文:STM32-GPIO原创 2020-09-26 10:50:48 · 410 阅读 · 0 评论 -
STM32-GPIO_寄存器版(1)
本文基于STM32F407ZGT6,适用于M3/M4大部分内核的STM32芯片。——————————————————————————————STM32每个通用 I/O 端口包括 10个32位寄存器一、4个 32 位配置寄存器1、GPIOx_MODER——用于选择 I/O 方向(输入、输出、AF(复用)、模拟)。2、GPIOx_OTYPER——用于选择输出类型(推挽或开漏)(IO口设置为输入时不用设置此寄存器)3、GPIOx_OSPEEDR ——用于选择输出速度(IO口设置为输入时不用设置此寄存原创 2020-09-26 09:27:04 · 1140 阅读 · 0 评论