STM32F407的A,B编码器
- 格式:docx
- 大小:12.30 KB
- 文档页数:2
STM32运用总结主要分为IO口,定时器的PWM和QEI,中断,ADC,DAC和DMA介绍。
在STM32的运用中第一步一般是使能相应模块的时钟,然后配置IO 口,最后配置相应的寄存器。
1.IO口STM32的IO口非常多,而且与其它外设模块通常是复用的。
在不同的外设中IO口的设置是不一样的。
这一部分介绍普通的数值IO口。
IO口有A-G共7组,每组16口。
1.IO口在时钟总线AHB1上,使能对应端口的时钟。
在寄存器RCC->AHB1ENR中。
2.配置IO口的模式,普通的IO口配置为普通的输入输出模式。
配置IO口是悬空还是上拉或者下拉。
以上两步分别在寄存器GPIOx->MODER和GPIOx-> PUPDR(x=A,B,C,D,E,F,G)3.其中配置为输出模式时还要设置速度和相应的输出方式,开漏或者推挽,以上两步分别在寄存器GPIOx-> OSPEEDR和GPIOx->OTYPER(x=A,B,C,D,E,F,G)。
4.设置IO口的高低电平。
在寄存器GPIOx->BSRRH中置相应的位为1就是将相应的位置0,在寄存器GPIOx->BSRRL中置相应的位为1就是将相应的位置1.另外还可以设置GPIOx_ODR寄存器来设置输出电平以及读取GPIOx_IDR寄存器来获取输入电平。
2.PWMSTM32的定时器也非常之多,用到的主要是两个部分:用定时器产生PWM和定时触发ADC,这里一部分介绍PWM。
(高级定时器的配置和这差不多,由于在STM32F103里面已经尝试过在STM32F407里面就没有再写)1.配置IO口。
我们说过STM32的外设模块主要是和IO口复用的,因此在使用外设模块时首先配置好相应的IO口。
比如使用A口的PA1作为定时器Timer2的PWM输出。
则应按照如下的步骤来配置PA1。
1)使能A口的时钟。
在寄存器RCC->AHB1ENR中。
2)配置PA1为复用功能。
stm32编码器工作原理
STM32编码器的工作原理以下几个方面来进行讲解:
1. 编码器介绍:编码器是一种测量旋转运动的装置,能够将旋转角度转换为电信号输出。
2. 工作原理:STM32编码器工作原理基于两个光电传感器和
一个光栅带的相互作用。
光栅带上有一定数量的黑白条纹,两个光电传感器分别测量这些条纹的变化。
3. 接口模式:STM32编码器可以通过两种接口模式进行工作,分别是增量式和绝对式。
增量式编码器输出的是脉冲信号,而绝对式编码器输出的是相对位置数据。
4. 编码方式:STM32编码器可以通过两种编码方式进行工作,分别是光电和磁电编码。
光电编码器利用光电传感器对光栅带上的黑白条纹进行测量,而磁电编码器则利用磁场对磁栅带进行测量。
5. 编码器的应用:STM32编码器广泛应用于机器人、航空航天、汽车零部件和工控设备等领域,用于测量旋转运动的角度和速度。
总结:STM32编码器通过光电或磁电传感器对光栅带或磁栅
带上的黑白条纹进行测量,将旋转运动转换为电信号输出,并通过增量或绝对方式输出相对位置数据或脉冲信号。
它具有精
度高、响应速度快、可靠性强等优点,在许多领域中都有广泛的应用。
stm32f407数据手册中文STMICROELECTRONICS STM32F407VGT6 微控制器, 32位, 以太网MAC, 照相机接口, ARM 皮质-M4, 168 MHzSTM32F407 cortex-m4的高端芯片,常用于嵌入式产品中,内含DSPμC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的、可裁剪的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,适合很多商业操作系统性能相当的实时操作系统(RTOS)。
为了提供最好的移植性能,μC/OS II最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
μC/OS II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。
其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。
内核属于抢占式,最多可以管理60个任务。
从1992年开始,由于高度可靠性、鲁棒性和安全性,μC/OS II已经广泛使用在从照相机到航空电子产品的各种应用中。
μC/OS-II实时多任务操作系统内核。
它被广泛应用于微处理器、微控制器和数字信号处理器。
μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean brosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的B B S 上。
μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
1) 核心部分(OSCore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。
能够维持系统基本工作的部分都在这里。
STM32F407单片机使用攻略:中文手册、实战问答15篇STM32F4系列基于最新的ARM Cortex M4内核,在现有出色的STM32微控制器产品组合中新增了信号处理功能,并提高了运行速度;STM32F405x集成了定时器、3个ADC、2个DAC、串行接口、外存接口、实时时钟、CRC计算单元和模拟真随机数发生器在内的整套先进外设。
STM32F407在STM32F405产品基础上增加了多个先进外设。
STM32&STM8技术社区整理STM32F407中文资料,帮助大家的开发设计。
中文资料篇在STM32F4DISCOVERY上移植EMWIN(图片+源码)EMWIN 是NXP和Segger公司联合开发的图形库,界面比起UCGUI更加漂亮和直观,美中不足的是,在不购买其专利授权情况下,无法获取源码,只有编译好的库使用,目前库版本已经更新到5.20。
现在分享一个4.15D版本的EMWIN在STM32F4DISCOVERY上的移植。
STM32F407学习板全部例程+原理图全部代码都已测试通过,若发现有什么问题请和贴主联系。
因为时间仓促,基本上都是一些硬件测试程序。
记得要把例程和固件库放在同一目录下,全部工程共用一个库的。
至于SD 卡里的文件只是几个测试图片和音频文件,只需要根据程序将文件放置在相应目录下即可STM32F407正交编码器问题所有的定时器都有编码器模式,但是,实际上TIM9~12保留了。
tim2-5是正常的。
不知道是BUG还是确实就是没有,总之是被简介给坑了。
大家注意下。
STM32F407跑ucosii+emwin5.14,欢迎大家围观~工程代码提供在F407上移植了ucOSII和emwin5.14,因为最近在做实验室的项目,在LPC1788上使用了emwin,那个界面绝对不是盖的,相当的漂亮啊~所以就想移植到STM32F407上面来了。
附工程源码分享下刚刚画好的DXP封装__STM32F407效果如图示,原理图源文件在附件里,送几个PCB库,略微检查了下,应该没问题开发问答篇STM32F407在USART时的管脚映射说明STM32F407在跑USART时,USART3对应的是PD8和PD9.其他的USART1、USART2对应的是哪个管脚STM32F407运行usb otg的库函数#define MSC_IN_EP 0x81#define MSC_OUT_EP 0x01端点被更改就不能正常应用了有没有谁尝试更改端点关于stm32f407-discovery开发板DAC的例程问题在stm32f407discovery开发板的例程中对于DAC通道1的DMA配置为通道7流为6 ,DAC通道2的DMA配置为通道7流为5,这跟官方的编程手册中的说明dma流跟通道完全相反了,整个程序是可以跑的,但是不知道问题出在了哪里关于stm32f407 I2s DMA的主发送问题最近用stm32f407做一个sd卡mp3解码后,音频传输的项目,声卡芯片用的VM8978,采取的是SPI3的i2s,用的DMA是DMA1的stream5通道0.用的是主发送模式在dma中断中我用一个led反转看是否进入中断,结果是,中断进入,但i2s 引脚为何没有输出,按道理说应该是有波形输出的啊BCLk脚怎么一直是低电平了?stm32f407 串口不中断有没高手熟悉stm32f407的啊? 小弟在使用时,发现如果打开三个uart发送和接收中断。
STM32的每个TIMER都有正交编码器输入接口,TI1,TI2经过输入滤波,边沿检测产生TI1FP1,TI2FP2接到编码器模块,通过配置编码器的工作模式,即可以对编码器进行正向/反向计数。
如下图,编码器使用了A,B两相信号,但是我只需要对TI1信号进行计数(第一行),我也是刚发现了这个错误,原来对两个信号都计数,导致码盘转一周得到不止100个脉冲(100线的光电码盘)。
通过STM32的编码器模块比较两想的电平信号就可以很容易地计算出编码器的运行情况了。
下面是我调试OK的代码:void Encoder_Configration(void){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;//PC6 A相PC7 B相GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 |GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Prescaler =0x0; // No prescalingTIM_TimeBaseStructure.TIM_Period =10000;TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);TIM_EncoderInterfaceConfig(TIM8,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);TIM_ICStructInit(&TIM_ICInitStructure);TIM_ICInitStructure.TIM_ICFilter =6;//ICx_FILTER;TIM_ICInit(TIM8,&TIM_ICInitStructure);// Clear all pending interruptsTIM_ClearFlag(TIM8, TIM_FLAG_Update);TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);//Reset counterTIM2->CNT = 0;TIM_Cmd(TIM8, ENABLE);}n_Counter = TIM_GetCounter(TIM8);Diled_Disp_Num((float)n_Counter);另外一个值得注意的问题是,STM32的定时器是16位的,意思是只能计数到65535,有两种方法,一是采用链式的方式用两个定时器将16位扩展为32位,还有一种简单的方法就是开启定时器的溢出中断,每中断一次就代表编码器运转了特定的角度。
stm32f407CAN配置-2020-11-021、虽然stm32f4系列具有两个CAN控制器,但是stm32f407只有⼀个CAN。
2、CAN_Prescaler最终值是等于设置值加⼀,存储于BRP寄存器⾥,Fpclk1是APB1总线的时钟,最⼤值为APB2总线时钟84MHz/2=42MHz。
3、CAN波特率=Fpclk1/((CAN_BS1+CAN_BS2+1)*CAN_Prescaler),举例:CAN波特率=42MHz/((7tq+6tq+1)*6)=500kbps。
4.0、CAN_InitStruct关键成员的含义如下:4.1、CAN_Prescaler控制时间⽚tq的长度;4.2、CAN_Mode包括正常模式、回环模式、静默模式、回环静默模式;4.3、CAN_SJW⽤于设置极限长度,即重新同步时单次可增加或缩短的最⼤长度,范围为1~4tq;4.4、CAN_BS1、CAN_BS2位时序,前者范围1~16tq,后者1~8tq;4.5、FunctionalState使能或失能某些的状态;4.6、CAN_TICM是否使⽤为时间触发的功能;4.7、CAN_ABOM是否使⽤⾃动离线管理,使能后可在节点离线后⾃动恢复⽽不需要软件来⼲预;4.8、CAN_AWUM是否使⽤⾃动唤醒功能,使能后可在监测到总线活动后⾃动唤醒;4.9、CAN_NART是否使⽤⾃动重传功能,使能后会⼀直发送报⽂直到成功为⽌;4.10、CAN_RFLM是否使⽤锁定接收FIFO,如果使能锁定,那么当FIFO溢出后就会丢弃新的数据,否则就是使⽤新的数据覆盖原有数据;4.11、CAN_TXFP⽤于设置发送报⽂的优先级⽅法,使能之后将以报⽂存⼊邮箱的先后顺序来发送,否则按照报⽂的ID的优先级进⾏发送;5.0、CAN_FilterInitStruct的关键成员含义如下:5.1、CAN_FilterMaskId有两种情况,当筛选器处于标识符列表模式下时,和CAN_FilterId类似,都是存储要筛选的ID,⽽当筛选器⼯作在掩码模式下,存储的是CAN_FilterId对应的掩码;5.2、CAN_FilterFIFOAssignment⽤于设置当报⽂通过筛选器以后存储到哪⼀个接收的FIFO⾥,范围为FIFO0或FIFO1;5.3、CAN_FilterNumber的范围为0~27,⼀共28个筛选器;5.4、CAN_FilterMode可设置成列表模式和掩码模式;5.5、CAN_FilterScale⽤于设置筛选器的位宽,可选16位或32位;5.6、CAN_FilterActivation⽤于设置是否激活该筛选器;6、CAN_IT_FMPO:消息挂号允许中断7.0、CanTxMsg结构体关键成员含义如下:7.1、StdId存储报⽂的11位标准标识符,范围为0x0~0x7FF;7.2、ExtId存储报⽂的29位扩展标识符;7.3、IDE⽤于配置选择使⽤StdId还是ExtId;7.4、RTR是⽤于存储报⽂类型的标志,可配置选择为数据帧还是遥控帧,通常配置成使⽤数据帧,因为遥控帧没有数据段,所以Data[8]中的成员是没有内容的;7.5、DLC⽤于存储数据帧的数据长度,范围0~8字节,如果已配置成遥控帧,该参数可配置为0;8、CanRxMsg结构体中的FMI⽤于存储筛选器的编号,也表⽰了是经过哪个FIFO进⾏接收的,可⽤于简化软件处理。
STM32F407单片机使用攻略:中文手册、实战问答15篇STM32F4系列基于最新的ARM Cortex M4内核,在现有出色的STM32微控制器产品组合中新增了信号处理功能,并提高了运行速度;STM32F405x集成了定时器、3个ADC、2个DAC、串行接口、外存接口、实时时钟、CRC计算单元和模拟真随机数发生器在内的整套先进外设。
STM32F407在STM32F405产品基础上增加了多个先进外设。
STM32&STM8技术社区整理STM32F407中文资料,帮助大家的开发设计。
中文资料篇在STM32F4DISCOVERY上移植EMWIN(图片+源码)EMWIN 是NXP和Segger公司联合开发的图形库,界面比起UCGUI更加漂亮和直观,美中不足的是,在不购买其专利授权情况下,无法获取源码,只有编译好的库使用,目前库版本已经更新到5.20。
现在分享一个4.15D版本的EMWIN在STM32F4DISCOVERY上的移植。
STM32F407学习板全部例程+原理图全部代码都已测试通过,若发现有什么问题请和贴主联系。
因为时间仓促,基本上都是一些硬件测试程序。
记得要把例程和固件库放在同一目录下,全部工程共用一个库的。
至于SD 卡里的文件只是几个测试图片和音频文件,只需要根据程序将文件放置在相应目录下即可STM32F407正交编码器问题所有的定时器都有编码器模式,但是,实际上TIM9~12保留了。
tim2-5是正常的。
不知道是BUG还是确实就是没有,总之是被简介给坑了。
大家注意下。
STM32F407跑ucosii+emwin5.14,欢迎大家围观~工程代码提供在F407上移植了ucOSII和emwin5.14,因为最近在做实验室的项目,在LPC1788上使用了emwin,那个界面绝对不是盖的,相当的漂亮啊~所以就想移植到STM32F407上面来了。
附工程源码分享下刚刚画好的DXP封装__STM32F407效果如图示,原理图源文件在附件里,送几个PCB库,略微检查了下,应该没问题开发问答篇STM32F407在USART时的管脚映射说明STM32F407在跑USART时,USART3对应的是PD8和PD9.其他的USART1、USART2对应的是哪个管脚STM32F407运行usb otg的库函数#define MSC_IN_EP 0x81#define MSC_OUT_EP 0x01端点被更改就不能正常应用了有没有谁尝试更改端点关于stm32f407-discovery开发板DAC的例程问题在stm32f407discovery开发板的例程中对于DAC通道1的DMA配置为通道7流为6 ,DAC通道2的DMA配置为通道7流为5,这跟官方的编程手册中的说明dma流跟通道完全相反了,整个程序是可以跑的,但是不知道问题出在了哪里关于stm32f407 I2s DMA的主发送问题最近用stm32f407做一个sd卡mp3解码后,音频传输的项目,声卡芯片用的VM8978,采取的是SPI3的i2s,用的DMA是DMA1的stream5通道0.用的是主发送模式在dma中断中我用一个led反转看是否进入中断,结果是,中断进入,但i2s 引脚为何没有输出,按道理说应该是有波形输出的啊BCLk脚怎么一直是低电平了?stm32f407 串口不中断有没高手熟悉stm32f407的啊? 小弟在使用时,发现如果打开三个uart发送和接收中断。
STM32运用总结主要分为IO口,定时器的PWM和QEI,中断,ADC,DAC和DMA介绍。
在STM32的运用中第一步一般是使能相应模块的时钟,然后配置IO口,最后配置相应的寄存器。
1.IO口STM32的IO口非常多,而且与其它外设模块通常是复用的。
在不同的外设中IO口的设置是不一样的。
这一部分介绍普通的数值IO口。
IO口有A-G共7组,每组16口。
1.IO口在时钟总线AHB1上,使能对应端口的时钟。
在寄存器RCC->AHB1ENR中。
2.配置IO口的模式,普通的IO口配置为普通的输入输出模式。
配置IO口是悬空还是上拉或者下拉。
以上两步分别在寄存器GPIOx->MODER和GPIOx->PUPDR(x=A,B,C,D,E,F,G)3.其中配置为输出模式时还要设置速度和相应的输出方式,开漏或者推挽,以上两步分别在寄存器GPIOx-> OSPEEDR和GPIOx->OTYPER(x=A,B,C,D,E,F,G)。
4.设置IO口的高低电平。
在寄存器GPIOx->BSRRH中置相应的位为1就是将相应的位置0,在寄存器GPIOx->BSRRL中置相应的位为1就是将相应的位置1.另外还可以设置GPIOx_ODR寄存器来设置输出电平以及读取GPIOx_IDR寄存器来获取输入电平。
2.PWMSTM32的定时器也非常之多,用到的主要是两个部分:用定时器产生PWM和定时触发ADC,这里一部分介绍PWM。
(高级定时器的配置和这差不多,由于在STM32F103里面已经尝试过在STM32F407里面就没有再写)1.配置IO口。
我们说过STM32的外设模块主要是和IO口复用的,因此在使用外设模块时首先配置好相应的IO口。
比如使用A口的PA1作为定时器Timer2的PWM输出。
则应按照如下的步骤来配置PA1。
1)使能A口的时钟。
在寄存器RCC->AHB1ENR中。
2)配置PA1为复用功能。
stm32编码器原理-回复标题:STM32编码器原理详解一、引言STM32是STMicroelectronics公司推出的基于ARM Cortex-M内核的32位微控制器系列,其强大的处理能力和丰富的外设接口使其在各种嵌入式系统中得到广泛应用。
在众多的应用场景中,编码器是一种常见的传感器设备,常用于测量旋转速度、位置和方向等信息。
本文将详细解析STM32与编码器的配合工作原理。
二、编码器基础编码器是一种将机械运动或位置转换为电信号的设备。
根据输出信号的形式,编码器主要分为增量型编码器和绝对型编码器。
1. 增量型编码器:每旋转一个固定角度,输出一组脉冲信号,通过计数这些脉冲来确定旋转的位置和速度。
其优点是结构简单、成本低,但需要连续跟踪位置信息。
2. 绝对型编码器:每个位置对应一个唯一的编码,可以直接读取当前的位置信息,无需连续跟踪。
其优点是定位精度高、抗干扰性强,但结构复杂、成本较高。
三、STM32与编码器的接口连接在STM32中,通常使用定时器或者通用输入输出(GPIO)接口与编码器进行连接。
1. 定时器接口:STM32的定时器具有捕捉/比较通道,可以用来捕获编码器的脉冲信号。
当编码器的A相和B相信号发生变化时,定时器的相应通道会产生中断,通过读取定时器的计数值和比较A相和B相的变化顺序,可以确定旋转的方向和步长。
2. GPIO接口:如果编码器的输出频率较低,也可以直接通过GPIO接口读取编码器的信号。
但是这种方法需要在软件中实现脉冲计数和方向判断,增加了处理器的负担。
四、STM32处理编码器信号的步骤以下是一个基本的STM32处理增量型编码器信号的步骤:1. 配置STM32的定时器或者GPIO接口,使能相应的中断。
2. 当编码器的A相或B相信号变化时,产生中断。
3. 在中断服务程序中,读取定时器的计数值或者GPIO的电平状态。
4. 根据A相和B相的先后顺序,判断旋转的方向。
一般情况下,A相领先B相表示正转,B相领先A相表示反转。
电机编码器的使&STM32的定时器编码器模式一、基础知识:编码器是小车测速反馈必不可少的模块,在做自平衡和速度的精确控制需要有编码器读取电机的转速和方向上图为编码器的示意图,中间是一个带光栅的码盘,光通过光栅,接收管接收到高电平,没通过,接收到低电平。
电机旋转一圈,码盘上有多少光栅,接受管就会接收多少个高电平。
我们做的自平衡是用的是SK3530高性能直流减速电机采用光栅测速单圈输出448*30个AB相脉冲也就是13440相位差90度接线说明:从白线到蓝线一次为:白线:A相;绿线:B相;红线:3.3V-5V;黑线;GND黄线和蓝线为电机两根接线柱的线,通常接电机驱动。
正转A相超前B相90度,也就是说,A相进入下降沿的时候,B相是高电平,反转的时候A相落后B 相90度,也就是说A相进入下降沿的时候,B相是低电平,通常用法:A相接入单片机的中断IO口,B相接入单片机的普通IO口。
二、stm32编码器模式接口:在通用定时器和高级定时器中有这个功能从图上中可以看出,TI1波形先于TI2波形90°时,每遇到一个边沿变化是,计数器加1(可以通过寄存器设置加减),可以看出一个光栅,被计数了4次。
TI1波形后于TI2波形90°时,每遇到一次边沿变化,计数器减1。
也就是说13440个脉冲计数了13440*4=53760次简单的计数显示程序:由于DJ_jishu_L是int16_t即(signed)int类型数据范围-32768~32767 TIM_GetCounter返回值是unsigned int类型转换为int类转动一圈DJ_jishu_L变化情况:即从0到-32768到32767到11579计数器变化值=32768+(32767-11579)= 53956与之前的53760相差不大程序如下两个定时两个通道PA6PA7左电机PB6PB7右电机。