stm32

STM32库函数与寄存器

一笑奈何 提交于 2020-02-03 09:01:02
STM32库函数与寄存器 库函数和寄存器的区别 我们可以在库函数模板里面,直接操作寄存器,因为官方库相关头文件有寄存器定义。但是不能在寄存器模板调用库函数,因为没有引入库函数的相关定义 了解寄存器基本原理的目的是为了让我们对STM32相关知识有比较深入的理解,这样在开发过程中方可得心应手。底层代码配置出了问题需要调试的话,必须对寄存器有一定的了解才能找到问题,因为调试代码,底层只能查看寄存器的相关配置。 来源: CSDN 作者: Drug_Lover 链接: https://blog.csdn.net/Drug_Lover/article/details/104142509

STM32定时器计算公式,TIM2的CH4PWM配置

偶尔善良 提交于 2020-02-03 04:17:44
void TIM2_PWM_Init(void) { //定义结构体 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //挂接时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIO外设和AFIO复用功能模块时钟使能 //配置引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); //定时器基础配置 TIM_InitStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_InitStructure.TIM_CounterMode = TIM

STM32通信:IIC

被刻印的时光 ゝ 提交于 2020-02-03 00:23:57
因为教程上说STM32的硬件IIC复杂而且不太稳定,所以这里使用的是直接控制GPIO端口模拟IIC时序的方式进行通信 因为涉及到初始化、发送、接收等多个功能,所以就分成若干个函数来写了 这里涉及的是主设备上IIC的相关代码,因为SCL线的电平由主设备控制,因此主设备的代码会简单一点 从设备涉及到对SCL线上电平的识别,进而涉及到循环判断或者中断,以后有时间再去看看怎么写(挖坑) 一、IIC通信 1.简介 IIC总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,两条线可以挂多个设备。 IIC设备(绝大多数)里有个固化的地址,只有在两条线上传输的值等于IIC设备的固化地址时,其才会作出响应。通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。 2.时序图 总结下来就是以下几点: 1.正常传输数据时,当SCL线处于低电平期时,SDA线上的电平允许变动 2.正常传输数据时,当SCL线处于高电平期时,SDA线上的电平不变 3.如果在SCL线的高电平期,SDA线由高电平向低电平跳变,则表示开始传输数据(START信号) 4.如果在SCL线的高电平期,SDA线由低电平向高电平跳变,则表示停止传输数据(STOP信号) 由于SCL线受主设备控制,因此主设备上的代码非常好写 发送数据时

STM32F1学习笔记

假装没事ソ 提交于 2020-02-01 19:25:27
(二)STM32学习之GPIO 1、GPIO简介 GPIO 是通用输入输出端口的简称,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的GPIO 被分成很多组,每组有16 个引脚,所有的GPIO 引脚都有基本的输入输出功能。 2、GPIO框图剖析 大致可分为七个模块,由箭头走向可知晓GPIO 引脚线路经过两个保护二极管后, 向上流向“输入模式”结构,向下流向“输出模式”结构 。 (1)保护电路 VDD为3.3V,VSS为公共接地端,当外部输入电压大于3.3V时,上面的二极管导通,保护内部芯片。如果输入为负电压,则下面的二极管导通,电流往外面流,保护内部芯片。 当输入电压过大也将会烧毁芯片,切记不可用GPIO直接连接电动机,电动机具有较大得反向电动势,且积分时间短。 (2)普通输出控制 推挽输出: 所谓的推挽输出模式,是根据这两个MOS 管的工作方式来命名的。在该结构中输入高电平时,经过反向后,上方的P-MOS 导通,下方的N-MOS 关闭, 对外输出高电平,电流往外流,形似往外推 ;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS关闭, 对外输出低电平,电流往里面流,则为挽留 。当引脚高低电平切换时,两个管子轮流导通,P管负责灌电流,N管负责拉电流,

stm32新建工程

人盡茶涼 提交于 2020-02-01 18:08:40
stm32新建工程示例 1.新建文件夹(文件名与位置随意) 2.在此文件夹内在新建USER CORE FWLIB OBJ 四个文件夹 3.打开keil5 在project里面点击第一个… 4.选中刚刚创建的文件夹里面的USER文件夹,随意命名后保存 5.保存后弹出此窗口(窗口里面是各开发板对应的型号,没有的为未安装好)选择对应型号点击ok,后弹出页面再点击ok 6.如图在库文件里面找出图一中第3个到第9个共7个文件 图二中两个文件夹于图三中3个文件 全部如图放到文件夹里面 7.右击Tar…点击Manage…图二中可以把第一栏名字随意更改,第二栏名字为刚刚创建的4个文件夹中的三个 8.点击CORE再点击右下角第一个Add Files,在CORE文件里面类型选择All files,选中这两个文件。其他USER选中三个.c文件,FWLIB选择src中所有.c文件。添加成功如图2 9.点击魔法棒1,选中C/C++在Define里面输入STM32F10x_HD,USE_STDPERIPH_DRIVER 里面字符和标点都不能错 在Include点击…分别加上刚刚复制进文件夹里面的文件的路径(路径必须是最后一级) 10.点击Selct…选择文件夹OBJ 然后把下面3个勾一起勾上 点击编译无错误则完成 完成 来源: CSDN 作者: ☞strive☜ 链接: https://blog.csdn

关于嵌入式学习随笔->12《STM32CubeMX应用3-PWM的配置》

霸气de小男生 提交于 2020-02-01 17:04:23
以蜂鸣器为例,找到自己板子的蜂鸣器。 由电路可知蜂鸣器由PH6控制,在cubemx中查看该引脚含有定时器12通道1,因此,我们可以用这个定时器来做PWM的输出。 STM32CubeMX中的配置 点击generate code生成代码。 HAL库中相关函数 HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) { uint32_t tmpsmcr; /* Check the parameters */ assert_param(IS_TIM_INSTANCE(htim->Instance)); /* Set the TIM state */ htim->State = HAL_TIM_STATE_BUSY; /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) { __HAL_TIM_ENABLE(htim); } /* Change the TIM state*/ htim-

STM32开发笔记97: C++语言命名规范

最后都变了- 提交于 2020-02-01 16:23:07
单片机型号:STM32F091RCT6 在此文章中记录C++语言的命名规范。 1、文件名均采用小写英文字母方式实现,多个英文单词之间用“_"予以分割; 2、宏定义均采用大写英文字母方式实现,多个英文单词之间用“_"予以分割; 3、自定义数据类型均小写英文字母方式实现,多个英文单词之间用“_"予以分割; 4、类名首字母用C表示,后续采用匈牙利命名法,首字母大写,如遇英文缩写单词,则按照英文命名规范进行拼写,例如LED所为缩写单词,但是英文规范可以写作led或Led,则类名用CLed表示,而HAL是硬件映射层的缩写,英文用全大写表示,使用时,则使用CHAL命名; 5、用类声明的类对象,去除首字母C即可,例如CLed命名的对象,则直接为Led。 来源: CSDN 作者: snmplink 链接: https://blog.csdn.net/qingwufeiyang12346/article/details/104133409

STM32初练总结(TIM)

寵の児 提交于 2020-02-01 10:31:46
STM32初练总结(TIM) 总结下最近学习STM32 中定时器的一些心得。STM32有三种类型的TIM,基本型,通用型和高级TIM,这里只针对通用型TIM,其他类型的定时器可以参考datasheet。 TIM定时器应用 1、用在程序中需要设置定时的地方,比如某些需要等待一定周期的时间后再执行的代码。 2、可以用于产生PWM波形,控制占空比。 3、可以用于产生单脉冲,作为触发信号输出。 5、可以作为内部程序的中断触发源。 。。。还有其他能用到的地方,用到了再总结。 TIM定时器使用 TIM定时器的时钟源来自内部时钟CLK_INT,在这一时钟的基础上可以通过配置 预分频器寄存器 (TIMx_PSC)进行二次分频,得到需要的频率。 另外一个重要的寄存器是计数器寄存器(TIMx_CNT),是TIM的计数器,可以递增或者递减,通过配置寄存器实现控制。 还有一个重要的寄存器是自动装载寄存器 (TIMx_ARR),这个寄存器配置了TIM每次累加达到的阈值或者递减的起始值,由用户配置。 除此之外,还有一些辅助的寄存器来控制中断使能和产生中断等,以及TIM输入输出的模式等。 TIM代码 用TIM2实现1s定时的代码如下: void Time2_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef

STM32学习笔记(一):跑马灯

二次信任 提交于 2020-02-01 03:59:05
本实验所采用的开发板为正点原子的MiniSTM32f103rc开发板,主函数程序如下,注释如下: main.c #include "stm32f10x.h" void Delay(u32 count) { u32 i=0; for(;i<count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.8 GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

正点原子STM32探索者学习笔记2

丶灬走出姿态 提交于 2020-02-01 03:57:52
编写者:龙诗科 邮箱:longshike2010@163.com 2015-5-18 STM32F4中GPIO库函数中几个重要的函数: 1.首先是初始化函数如下: 2个读取输入电平函数如下: 2个读取输出电平函数如下: 4个设置输出电平函数如下: 对于跑马灯程序的两个主要函数: void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟 //GPIOF9,F10初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHZ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOF, &GPIO