草庐IT

STM32点亮LED的三种方法

学习STM32的第一课,都是点亮LED。芯片:STM32F107RC系统时钟:72MHzLED引脚:板载引脚PD2,正极接3.3V,负极接PD2,低电平点亮第一种方法:使用库函数操作LED引脚配置:voidLED_Init(void){GPIO_InitTypeDefGPIO_InitStruct;//GPIO配置结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//使能PD2的时钟,GPIOD //PD2引脚配置 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;//PD2引脚 GPIO_InitStruct

8路灰度传感器与stm32f1

目录1.连接2.adc配置3.主函数1.连接2.adc配置#include"adc.h"#include"delay.h" //初始化ADCvoidAdc_Init(void){ /*定义两个初始化要用的结构体,下面给每个结构体成员赋值*/ ADC_InitTypeDefADC_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; /* 使能GPIOA和ADC1通道时钟 注意:除了RCC_APB2PeriphClockCmd还有RCC_APB1PeriphClockCmd,那么该如何选择?APB2:高速时钟,最高72MHz,主要负责AD输入,

STM32单片机直流电机PID速度控制正反转控制(霍尔磁铁测速)LCD1602

实践制作DIY-GC0116-直流电机PID速度控制一、功能说明:基于STM32单片机设计-直流电机PID速度控制功能介绍:STM32F103C系列最小系统+LCD1602+直流电机+磁铁+霍尔传感器+MX15系列驱动模块+4个按键(速度减、速度加、开/关、正转/反转)1.直流电机安装磁铁转盘配合霍尔传感器传感器可以准确输出电机的速度信号,通过单片机采集速度,实时显示在LCD1602上面xxxxRPM(也就是转每分钟)。2.通过按键设定目标速度,然后通过PID算法输出PWM信号精确控制电机速度。3.按键设定目标速度范围(0~3600转每分钟),按键点击一次+60或者-60转每分钟。4.有一个开

STM32 FIR实时数字滤波器实现

首先是生成不同周期的正弦波:        由于定时器设置为250us进入一次中断,每秒可进入中断4000次,为了生成25HZ的正弦信号,一个周期内生成160个数据;为了生成200HZ的正弦信号,一个周期内生成20个数据,故代码如下:   sin_1=arm_sin_f32(3.141592654*i/80)+1;//25HZ信号   sin_2=arm_sin_f32(3.141592654*i/10)+1;//200HZ干扰   if(i==161)    {       i=1;    }25HZ_sin200HZ_sin     然后将200HZ_sin缩小0.4倍以后同25HZ_si

Keil5同时兼容C51与STM32工程

第一步:下载并安装keil4(C51),详细安装步骤参考网上,这里就不啰嗦了。keil4安装目录内容如下:第二步:安装kelil5(mdk514),不要和keil4安装在同一个文件夹,安装过程不罗嗦了。keil5安装目录内容如下:第三步:最关键的一步,打开keli4的安装路径,复制整个C51文件夹到Keil5的目录下:再把打开keil4安装目录下的UV4文件夹里面的全部文件,全选复制,粘贴到Keil_v5下的UV4文件夹,会有冲突提示,选择跳过即可,不要选择替换。再回到keil4安装目录下,打开TOOLS.INI文件,把里面的内容全部复制;再打开Keil5下目录下的TOOLS.INI文件,在最

使用STM32CubeMX配置工程,烧录时出现No target connected(没有目标连接)的错误解决办法

目录    一、解决方法:二、错误原因:在Keil5使用ST-link烧录重新到STM32时出现如图错误解决方法:           网上看到的方法很多都是按住复位键不动,然后在点击下载的同时快速松开单片机复位键,这就要考验我们的手速了,虽然这样也行,不过这样并不能解决根本问题,因为产生这个错误的原因很可能是在用STM32CubeMX构建工程时没有在systemcore中将SYS里的NODebug更改。如图所示一、解决方法: 1、首先要打开STM32CubeMX,然后找到SYS,将NODebug修改为SerialWirel。         2、这个时候如果你马上编译下载,你会发现还是会出现

STM32 (十三) SPI

一、简介SPI通讯协议SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样。产生时钟的一侧称为主机,另一侧称为从机。总是只有一个主机(一般来说可以是微控制器/MCU),但是可以有多个从机(后面详细介绍);数据的采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低)。具体要看对SPI的配置;整体的传输大概可以分为以下几个过程:主机先将NSS信号拉低,这样保证开始接收数据;当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);  

STM32/GD32学习指南-踩坑之(一)外部晶振配置,初始化失败,不起振

GD32使用外部有源晶振和无源晶振的问题,型号为GD32F450一、GD32配置使用外部晶振1.使用外部无源晶振找到startup_gd32f450_470.s汇编文件,找到SystemInit()函数跳转进去在底部找到system_clock_config()函数,再次跳转进去选中宏定义:__SYSTEM_CLOCK_200M_PLL_IRC16M,跳转,如图将内部时钟定义注释掉,打开相应的外部时钟的定义:__SYSTEM_CLOCK_200M_PLL_25M_HXTAL根据自己的需求打开对应的系统时钟配置定义,比如我用的是外部25MHZ晶振,系统时钟配置为200MHZ,如果定义中没有自己想

基于STM32的自动重装载auto-reload preload以及影子寄存器

目录写在前面正文总结写在前面        在使用cubeMX开发stm32,会经常用到定时器,并通过定时器产生中断计数来定期地执行某些任务。在配置时会遇到auto-reloadpreload。这让熟悉51开发时解触到的定时器产生中断后自动重装载计数值让其产生下一次中断名字有点相似但实际并不是一回事。于是便有了这篇文章。箭头所指的寄存器有影子即代表有它们有影子寄存器。 正文在51开发时,自动重装载定时器的值是为了保证下一次计数值溢出时重新装载计数值产生定时器中断。而本文所说的影子寄存器是在预装载时真正地起了缓冲作用, auto-reloadpreload使能:在更新事件(计数器溢出,比较输出等

【07】STM32·HAL库开发-新建寄存器版本MDK工程 |下载STM32Cube固件包 | 新建MDK工程步骤

目录1.新建工程前的准备工作(了解)1.1下载相关STM32Cube官方固件包(F1/F4/F7/H7)2.新建寄存器版本MDK工程步骤(熟悉)2.1新建工程文件夹2.1.1Drivers文件夹2.1.2Middlewares文件夹2.1.3Output文件夹2.1.4Projects文件夹2.1.4User文件夹2.2新建一个工程框架2.2.1新建并保存工程2.2.2选择主控型号2.2.3删除文件夹2.3添加文件2.3.1设置工程名和分组名2.3.2添加启动文件2.3.3添加SYSTEM源码2.4添加Readme分组文件2.4魔术棒设置2.4.1Target选项卡2.4.2Output选项卡