草庐IT

HAL_TIM_Encoder_Start

全部标签

通过修改HAL_UART_Transmit_DMA()函数,解决串口发送DMA只能发送一次的问题

参考文章:1. http://t.csdn.cn/FT6Mg         2. http://t.csdn.cn/ejFIQ今天用STM32F1的HAL库开发遇到一个奇怪的问题,在主函数循环调用中用串口1的DMA请求,将内存中的数据发送给串口,无论延迟Delay开了多大,始终只能发送一次DMA数据。后来在网上查阅大佬的资料终于有了思路。废话不多说,先上代码:在stm32f1xx_hal_uart.c文件中找到HAL_UART_Transmit_DMA()函数实现,在解锁操作__HAL_UNLOCK;后添加代码:huart->gState=HAL_UART_STATE_READY; 编译以后

【STM32CubeMX+HAL库】hmi串口屏显示波形

usarthmi是淘晶驰开发的一款基于串口通信并采用指令集控制的可触摸屏幕,集成了多种控件,如按钮控件,滑块控件等,大大减轻了开发的难度。      曲线控件学习入口下面我们来讲解一下cubeMX的配置以及输出正弦波代码的编写(三角波、方波同理)一、CubeMX配置1、设置时钟源(外部高速晶振)2、配置烧录口 3、串口配置这里我们选择使能串口1,可以看到设置完成后,系统会选择固定的引脚,当引脚被占用时,则无法使能串口1,因此st公司提供了多个串口通信通道(不同芯片数目不同)。usart.c文件中可查看串口的具体配置 4、时钟树配置前期基本拉满即可,博主用的是stmF4ccu6,不同芯片主频不同

STM32+HAL库使用ADC轮询模式采集音频信号

ADC模块:咪头声音采集模块ADC轮询模式缺点:占用CPU的使用率        软件开始ADC转换后,一直等到转换完成后,才向后执行,这个代码在初始化ADC之后执行一次校准(不执行这一步也可以,但精度可能会低一些);然后就可以使用ADC轮询转换了,只需要三步:启动转换、等待转换完成、读取转换数据,即可完成一次ADC转换。 1开启外部高速时钟2配置时钟树3USART配置4ADC配置5代码配置//串口重定向#include"stdio.h"intfgetc(FILE*f){uint8_tch=0;HAL_UART_Receive(&huart2,&ch,1,0xffff);returnch;}i

STM32 HAL库PID控制电机 第三章 PID控制双电机

STM32HAL库PID控制电机第三章PID控制双电机注:本文含全部PID控制代码,保证可以运行,如不能运行可以留言回复1基础配置1.1编码器电路图及配置引脚定时器通道PA0TIM2_CH1PA1TIM2_CH2PB6TIM4_CH1PB7TIM4_CH2因此需要把TIM2、TIM4配置为编码器模式。在STM32CubeIDE中找到定时器2与定时器4,进行模式配置。以下以定时器2为例,定时器4只需进行相同配置即可。选择定时器为编码器模式,设置为不分频,最大计数值为65535,使能自动重装载,并选择TI1和TI2两路输入,实现四倍频效果。配置完定时器2和定时器4后,需要再使用一个定时器,利用其产

STM32 HAL库开发——入门篇(1)

目录一、GPIO1.1什么是GPIO 1.2GPIO简介 1.2.1GPIO特点 1.2.2GPIO电气特性 1.2.3GPIO引脚分布1.3IO端口基本结构介绍 1.4GPIO的八种模式 1.5GPIO的寄存器介绍1.6通用外设驱动模型(四步法)1.7GPIO配置步骤 1.8编程实战:点灯1.9编程实战:按键点灯 二、中断2.1什么是中断2.2NVIC2.2.1NVIC基本概念 2.2.2NVIC相关寄存器2.2.3NVIC工作原理 2.2.4STM32中断优先级基本概念2.2.5STM32中断优先级分组2.2.6STM32NVIC的使用 2.3EXTI2.3.1EXTI基本概念2.3.2E

大疆遥控控制M3508电机二(基于HAL库)

接上一篇文章,话不多说直接开始一、打开我们创建的工程文件,先就建立一个文件夹用来存放我们写的子文件(不建立也行),然后建立pid.h,pid.c存入我们建立的文件夹中,并把它的源文件和头文件添加进去,最后记得编译一下。二、遥控器部分先在main.h中定义一个遥控器接收数据的结构体,参考了官方的定义不过我删了一部分不需要的。typedefstruct{  struct  {    signedshortch0;    signedshortch1;    signedshortch2;    signedshortch3;    unsignedchars1;    unsignedchars2

STM32定时器编码器模式实现直流有刷电机测速(HAL库)

前言最近在做一个单片机大作业,要用到直流有刷,在这里把学习编码器的知识记录一下,学习参考资料:正点原子DMF407电机控制专题教程_V1.0编码器测速原理我所使用的编码器是市面上常见的磁电增量式编码器,其有AB两相,用于输出电机转动时的脉冲数,AB两相的先后顺序决定了电机的转动方向这其实就是单片机的外部计数器模式,51中也带有同样的功能信号从通道被采样后的处理过程如下编码器的计数接口是利用脉冲的边沿来计数的,我们知道AB两相都有脉冲且相位差为90度,那么一次检测最多可以得到四个边沿,此时我们可以通过配置计数的方式来实现不同的边沿计数由图可以看出,总共有三种计数方式供我们选择,不同的模式对应了不

通俗理解TIM定时器并简单使用

前言:本文章部分代码参考自野火的例程本人使用的是野火家的指南者开发板,芯片型号是STM32f103VET6有纰漏请指出,转载请说明。学习交流请发邮件1280253714@qq.com源代码在这里1定时器原理B站这位UP主讲51单片机定时器工作原理讲得很好2STM32定时器简介stm32有3种定时器,分别是基本定时器、通用定时器、高级定时器基本定时器是一个16位的只能向上计数的定时器,只能定时,没有外部IO通用定时器是一个16位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部IO高级定时器是一个16位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输

【Failed to start nginx - high performance web server.】

启动nginx如果报这个错误,一般需要去nginx安装的日志目录查看错误日志文件error.log,我们就可以进一步排查出nginx出现的错误情况cat/nginx/logs/error.log发现报错:>bind()to0.0.0.0:8000failed(98:Addressalreadyinuse)stillcouldnotbind()1、找到占用该端口的进程lsof-i:80002、使用kill命令干掉它这个进程kill-9pid3、重启Nginx即可systemctlrestartnginx

android - SQLite 异常 : cannot start a transaction within a transaction (code 1)

我在完成一个SQLite事务时遇到了问题,我完全不知道该怎么做。完全看起来像thisbug从2007年开始。我正在创建我的employee表(它引用另一个表entity)如下(为简洁起见进行了编辑):CREATETABLEemployee(_idINTEGERNOTNULL,PRIMARYKEY(_id),FOREIGNKEY(_id)REFERENCESentity(_id)ONDELETEcascadeONUPDATEcascadeDEFERRABLEINITIALLYDEFERRED)然后我按如下方式运行事务(使用SQLiteDatabase对象,我还在日志中报告事务状态):>>