
STM32
文章平均质量分 64
一只活蹦乱跳的大鲤鱼
这个作者很懒,什么都没留下…
展开
-
平衡小车PID学习
离散式PID:位置环:入口参数:位置测量值,编码器的位置测量值系统的参数调定要求:目标: 准确性,稳定性,快速性。指标: 最大超调量,响应时间,静差。最大超调量->稳定性响应时间 ->快速性静差 ->准确性参数:P:提高响应速度。KP大会减小静差,提高速度。但是过大会振荡(引入微分)KP小且KI为0时会出现静差I:减小静差。响应速度更快。弊端是if有误差,随着时间推移会越来越大。D:抑制振荡防止超调,减少振荡次数。弊端:响原创 2022-03-05 16:36:53 · 3689 阅读 · 0 评论 -
板球控制系统调试过程及代码编写
问题舵机的速度非常慢,而且只有 Kp的时候,异常的振荡,首先板子两边加了围墙,这样掉不下去,所以球就在板子上来回满地图跑来跑去,不停地振荡。根本没有效果。加了D之后也特别抖,用手拨一下,拨得稍微大一点之后,就会反向运动好长,超调很大,没有挡板的话直就掉下去了,舵机反应很慢。静差也不小。速度慢,有一个问题是每次计算出pid之后,舵机不是在平衡的位置加减的,而是在上一次的位置加减,这样速度会慢很多。(这里没有这么用,但是可以记录一下这个坑)另外,之前的思路是openmv程序设成20ms发送一次坐原创 2022-03-05 16:36:02 · 2184 阅读 · 0 评论 -
正点原子delay执行出不来的问题
非常简单的流水灯代码,但是执行不了,排除后发现,很可能是delay函数死循环了,上网一查,发现真的早就有这个问题了。下面是源代码:int main(void){ HAL_Init();//³õʼ»¯ÅäÖÃHAL¿â Stm32_Clock_Init(360,25,2,8);//ÉèÖÃʱÖÓ£¬180MHz delay_init(180); LED_Init(); delay_ms(1000); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 , GPIO原创 2022-03-05 16:33:45 · 3007 阅读 · 1 评论 -
中断中不能dalay (systick)
延时函数是用systick定时器的中断产生的,而systick的中断优先级是最低的,当在其他的中断中写delay时,因为优先级是最低的,所以是不能实现延时的,只能执行一些软件指令来延时原创 2022-03-05 16:33:10 · 900 阅读 · 0 评论 -
HAL库 STM32 串口通信函数
HAL_UART_Receive_IT串口!HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);HAL_UART_Receive_IT函数使用的时候简单的配置了串口的参数(波特率等等)之后,就可以初始化的时候调用一下这个函数,该函数会开启接收中断并且设置接收缓冲以及接收缓冲接收最大数据量。用处?这个函数主要是用于从串口设备接收数据,中断方式,只要接收到数据就会存储到第二个形参对应的缓冲区中,然后进入中断回调函原创 2022-03-05 16:32:29 · 1773 阅读 · 0 评论 -
STM32F103C8T6系统板
组成1.电源部分2.复位3.晶振4.CH340G 电路STM32-CH340实现一键下载电路分析CH340G电路CH340转串口芯片的使用在5V供电时,电路为上图。首先,我们需要接VCC,GND,给芯片工作电源。其次,接上晶振电路,提供时钟信号。这个电路又叫转串口电路,因此,我们需要USB信号,D+,D-对应连接。输出的串口信号,可以直接接单片机,当然,一般的习惯是加一个隔离二极管和一个电阻。V3引脚,一定要加退耦电容,不加的话,可能不会被识别。同时,电源也需要添加滤波原创 2021-08-29 18:29:05 · 25476 阅读 · 0 评论 -
匿名上位机调PID总结
使用高级收码方式实现PID调试数据格式:帧头+功能字+长度+数据+校验帧头+FUN+LEN+DATA+SUMFUN可以是 0xA1到0xAA,共10个,也就是说最多可以接受十个用户自定义的数据类型。(图一)LEN为DATA的长度(不包括帧头、FUN、LEN、SUM),只是数据的字节长度和。比如该帧数据内容为3个int16型数据,那么LEN等于6SUM是帧头一直到DATA最后一字节的所有字节的和,是内容的和,不是长度的和。uint8格式。(只保留低八位,高位舍去)。数据可以是uint8、in原创 2021-07-27 21:36:28 · 5135 阅读 · 1 评论 -
板球控制系统——舵机的初始化的一个低级错误导致的问题
舵机控制程序/************************************0.5ms-------2.5%---------0度;10001ms ----------5%-------45度;20001.5ms--------7.5%--------90度;30002ms ----------10%-------135度;40002.5ms --------12.5%-------180度;5000*****************************************原创 2021-07-26 18:01:03 · 1087 阅读 · 0 评论 -
STM32矩阵键盘——行列扫描编码模式
不同于之前一篇,这篇就是走常规路子的方法了,KEY.C#include "Key.h"/********************************配置IO为上拉输入********************************************/#define configInputPullUp(port, pin, GPIO_InitStruct) { \/* HAL_GPIO_WritePin(port, pin, GPIO_PIN_RESET); */ \原创 2021-07-25 00:18:04 · 1693 阅读 · 0 评论 -
矩阵键盘扫描——状态机方法(正确)
u8 Key_Value;int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_TIM2_Init(); MX_TIM3_Init(); while (1) { while(App_LEAVE != currState->loop()); // Button released (检测到了松开,就执行动作) if(currS原创 2021-07-24 11:40:00 · 924 阅读 · 0 评论 -
关于矩阵键盘、一个工程中UI界面的键盘&显示的逻辑
在上一篇文章中,转载了一种上流的方法,使用状态机、函数指针、结构体、结构体指针等,异常的上流,但是有些bug。目录调试其他矩阵键盘扫描的思路暴力扫描另外记录一下UI界面的思路main函数扫描问题1——改进补充2首先记录一下调试的过程。调试首先源代码的主函数中u8 Key_Value;int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_TIM2原创 2021-07-24 11:21:12 · 652 阅读 · 0 评论 -
矩阵键盘扫描——状态机方法(有错)
转自https://www.cnblogs.com/vinccc/p/8259696.htmlMAIN.Cu8 Key_Value;int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_TIM2_Init(); MX_TIM3_Init(); while (1) { if(App_LEAVE != currState->loo转载 2021-07-23 21:41:02 · 271 阅读 · 0 评论 -
STM32F407VET6控制MG996R 180度舵机
STM32F407VET6控制MG996R 180度舵机180与360度舵机360度舵机与一般舵机的区别是:给一般舵机一个PWM信号,舵机会转到一个特定角度,而给360度舵机一个PWM信号,舵机会以一个特定的速度转动,类似与电机。但与电机不同的是,360舵机是闭环控制,速度控制稳定。PWM 信号与360舵机转速的关系:0.5ms----------------正向最大转速;1.5ms----------------速度为0;2.5ms----------------反向最大转速;180度舵机为原创 2021-07-23 15:53:19 · 4792 阅读 · 0 评论 -
关于STM32 HAL库 串口接收中断
关于STM32 HAL库 串口接收中断串口每次接收到一个数据都会进入中断,而只有huart->RxXferCount减小到0了,才会进入中断回调函数。可以从下图中看出。所以,中断接收的过程就是(pTxBuffPtr,TxXferSize 和 TxXferCount 三个变量分别用来设置串口发送的数据缓存指针,发送的数据量和还剩余的要发送的数据量。pRxBuffPtr,RxXferSize 和RxXferCount 则是用来设置接收的数据缓存指针,接收的最大数据量以及还剩余的要接收的数据原创 2021-07-22 15:31:06 · 15507 阅读 · 1 评论 -
关于STM32平衡小车的几个关键疑问
引用文章一、关于姿态融合首先需要提一点关键的,**如果是采用卡尔曼滤波或者互补滤波,尽可能把采样时间调小,这样可以增加滤波的效果。建议采样时间不要高于10ms,起初我在测试的时候采样时间设置为20ms,结果卡尔曼滤波收敛速度非常慢,也就是旋转小车让角度突变的情况下,OLED上显示的角度值会超过实际值,然后再慢慢回来接近实际值。**包括PID控制也一样,毕竟我们所使用的都是将这些数学线性公式转换成离散形式的公式,采样时间越短,效果当然也就越接近原本数学公式所体现的效果了。采样时间包括姿态传感器的采样时间转载 2021-07-21 20:49:58 · 7530 阅读 · 3 评论 -
平衡小车电机转向问题、PWM1 PWM2模式问题
1.电机正转反转左电机是AIN2 = 0 AIN1 = 1 为正转,单纯电机没有一个正转反转的区分,都是相对的,所以安装好之后再定正反转有的代码里左右电机的正反转中AIN1 AIN2 与BIN1 BIN2的电平设置正好是相反的,这与电机的安装有关//左电机前转void MOTOR_left_FORWARD(void){ GPIO_ResetBits(GPIOB,GPIO_Pin_13); //AIN1 = 0 GPIO_SetBits(GPIOB,GPIO_Pin_12); /原创 2021-07-20 14:58:08 · 2226 阅读 · 1 评论 -
按键KEY 单击、双击、长按检测
/**************************************************************************函数功能:按键扫描入口参数:双击等待时间返回 值:按键状态 0:无动作 1:单击 2:双击*************************************************************************//3个计数值:只要按键按下 ,Forever_count就会计数,松开就清零第一次按键按下之后,count_原创 2021-07-20 12:17:27 · 9241 阅读 · 0 评论 -
STM32 MPU6050 平衡车
目录GY-521MPU6050 介绍陀螺仪加速度计陀螺仪和加速度计的关系,姿态解算融合的原理硬件从机地址部分参考STM32—驱动六轴MPU6050输出欧拉角GY-521MPU6050 介绍关于MPU6050各个方面的介绍,这篇博文[MPU6050开发 – 基本概念简介](https://blog.youkuaiyun.com/qq_29350001/article/details/78603714)GY-521MPU6050 是三维角度传感器,为全球首例集成六轴传感器的运动处理组件。这里的六轴,代表的是它原创 2021-07-20 11:13:08 · 2711 阅读 · 0 评论 -
STM32 使用JLink OB 检测不到芯片
错误描述JLink info:DLL: V6.88 , compiled Nov 12 2020 17:44:02Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04Hardware: V7.00S/N : 20090930Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFullJLink Info: STM32 (connect): Can not attach to CPU. Try原创 2021-07-15 15:11:49 · 5904 阅读 · 0 评论 -
I2C中关于ACK和NACK的几点东西
I2C的数据格式I2C中关于ACK和NACK的几点东西无数据:SCL=1,SDA=1;开始位(Start):当SCL=1时,SDA由1向0跳变;停止位(Stop):当SCL=1时,SDA由0向1跳变;数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据,不可随意改变SDA;当SCL保持为0时,SDA上的数据可随意改变;地址位:定义同数据位,但只由Master发给Slave;应答位(ACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0;否应转载 2021-07-14 20:45:03 · 2596 阅读 · 0 评论 -
STM32软件模拟IIC 控制OLED显示——OLED篇二
OLED显示方式二(使用缓存方式)OLED控制器为SSD1306,也就是说:裸屏由SSD1306驱动,这也是一种较为广泛使用的led驱动芯片。码表原理超全的字符库与显示函数移植代码后的debug原创 2021-07-13 16:29:12 · 5427 阅读 · 2 评论 -
STM32软件模拟IIC 控制OLED显示——OLED篇一
介绍IIC时序的博客STM32 IICIIC硬件连接模拟I2C 的GPIO配置//SDA B7//SCL B6//初始化GPIOvoid I2C_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7原创 2021-07-13 10:58:05 · 5784 阅读 · 1 评论 -
STM32软件模拟IIC控制OLED显示——IIC篇
STM32软件模拟IICIIC硬件连接模拟I2C 的GPIO配置IIC协议模拟IIC时序函数IIC写一个字节函数的debug介绍IIC的两篇博客,(最后都是读取AT24C02)介绍IIC时序的博客STM32 IICIIC硬件连接模拟I2C 的GPIO配置这里用到的是PC14 PC15关于PC13.14.15,可以看这篇博客STM32 PC13 PC14 PC15IO口的配置/*********************************** 重写IIC时序 *********原创 2021-07-13 10:56:24 · 12592 阅读 · 4 评论 -
STM32TIM1输出两路PWM控制平衡车
学习过程中碰到的几个问题1.PWM模式 与 输出比较模式 的区别:https://blog.youkuaiyun.com/qq_20222919/article/details/106564957(这位大佬的博客比较详细。)输出比较模式是每次到达OCR的值的时候,会变化一次电平,pwm模式在对应定时器上的四个通道产生的频率是同步的(即相同的),而输出比较模式在四个通道可以产生的频率不同。2.PWM1与PWM2模式110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道原创 2021-03-28 20:34:37 · 4796 阅读 · 12 评论 -
STM32F1 串口USART_SendData
做平衡车的时候,换了串口2 ,自己配置了一下,然后用USART_SendData()发送数据,写了这个USART_SendData(USART2,9),结果输出的是B,然后换成USART_SendData(USART,‘9’),就输出正常的9,很奇怪,因为按理说第一种情况输入9的话,输出的应该是嗯,没有输出,所以这里显然是有错误的了,那为什么输出了B呢?USART_SendData()的bug当发送单个字符的时候,USART_SendData没有任何问题,而如果连续一直发,就比如我刚才在whil原创 2021-03-28 14:53:06 · 17805 阅读 · 2 评论 -
STM32F1 与JTAG相关的IO口配置
激动的心,颤抖的手!!!!博主调试了一个晚上,(中间JLINK还出现了CPU_REG_Set():Regidter 0 is already marked as valid这未知的错误,第二天自己莫名的好了)想配置PA15控制一个LED,结果怎么配置,IO口都是低电平,差点没当场去世。最后,我终于,终于灵机一动,想是不是这个PA15有什么特殊的功能,我一想,JTAG啊,啊,一查,还真是,PA15默认作为JTAG口,输出高电平。。。。。。。。JLINK V8 支持 JTAG 和 SWD,同时 STM3转载 2021-03-27 21:48:22 · 4423 阅读 · 0 评论 -
设置为JLINK下载却显示检测不到STLINK
今天想试试MPU6050,打开模块的例程之后,换成Jlink的下载,结果发现下载不了,明明设置了JLINK下载,却显示没有检测到STLINK,网上也没查到怎么回事,最后在魔术棒的几个选项卡里发现问题出在Utilities。想要随着Dubug中的设置使用不同的下载器,需要选择Use Debug Driver这样就OK了。...原创 2021-03-23 11:41:45 · 2336 阅读 · 1 评论 -
STM32串口通信HAL库配置中 UART_IT_xx与UART_FLAG_xx 的区别
STM32串口通信HAL库配置中 UART_IT_xx与UART_FLAG_xx 的区别:(最后有个疑问希望路过的大佬帮忙解答一下。)UART_IT_xx刚开始疑惑的时候,发现网上都没有解释UART_IT_TC、UART_IT_RXNE这些标志的,(所以其实查HAL库才是不二法门)于是看了下HAL库。从UART_IT_RXNE入手,搜了一通,发现代码如下/** @brief Enable the specified UART interrupt. * @param __HANDLE__原创 2021-03-04 17:38:16 · 9593 阅读 · 5 评论 -
STM32串口常用
串口打印调试的方法1.printf使用正点原子的uart文件,配置好串口后可以直接程序中个加入printf(“sddsds”);此时使用的是串口1。在程序中可以再配置串口2,配置好后,需要在附加的对printf的程序中的fputc程序中的USART1改成2即可。2.使用HAL_UART_Transmit()在main中定义一个u8 test_char[] = “\r\n1122233”; 然后调用HAL_HAL_UART_Transmit输出它即可。...原创 2021-03-02 18:37:39 · 463 阅读 · 0 评论 -
STM32单片机位操作技巧——C语言
1.把变量的某位清零。//定义一个变量 a = 1001 1111 unsigned char a = 0x9f; a &= ~(1<<2);//括号中的 1 左移两位,(1<<2)得二进制数:0000 0100 //按位取反,~(1<<2)得 1111 1011 //所得的数与 a 作”位与&”运算,a = (1001 1111)&(1111 1011) //经过运算后,a 的值 a=1001 10112.把变量的某几个连续原创 2021-02-25 19:15:42 · 1648 阅读 · 0 评论