STM32
文章平均质量分 85
STM32相关的基础知识和常见bug
三境界
九层之台起于垒土
展开
-
问题记录:交换两行printf -打印结果不同
windowsIAR工具链:todoSTM32。原创 2024-04-24 14:11:14 · 799 阅读 · 0 评论 -
PID算法的一些理解
自动控制中的一种常用算法(用历史上的数据去预测系统的走向并提前做出反应)比如在一个空调房里有一个恒温箱要将箱子的温度控制在100℃(SetVal)最原始的方法就是位式控制算法,将由传感器获取的箱内温度ActVal反馈给系统进行比较ActVal>=SetVal 关闭加热ActVal<SetVal 继续加热这种方式可以将温度大致控制在设定值左右,但由于开启和关闭加热时存在的惯...原创 2020-02-03 21:49:10 · 692 阅读 · 0 评论 -
STM32--串口通信
概念是我们对于一个事物的所见清晰度,没有了概念,整个世界都是模糊的!有关通信的一些概念:并行/串行:发送数据的信息形式同步/异步:有时钟辅助来确保信息传输速度的叫做同步,有特殊信号位来控制信息传输的叫做异步全双工/半双工/单工:信息通道 全双工相当于双向车道,半双工相当于潮汐车道,单工相当于单向通道比特率/波特率:发送信息传输的速率,二者分子不同分母都为时间,比特率 bits/s |...原创 2020-02-19 19:59:45 · 256 阅读 · 0 评论 -
STM32目录结构解析
STARTUP:启动文件夹 里面包含了一个startup_stm32f10x_hd.s 这个文件就像是一个熔炉 将所有需要的文件连接为一个整体CMSIS:包含了core_cm3.c 和 system_stm32f10x.c 两个文件 分别是内核相关的函数 以及系统相关的函数:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware ...原创 2020-02-19 19:58:25 · 1986 阅读 · 0 评论 -
STM32--存储器
CPU从存储器取基本数据,指令存储器种类RAM存储器 (易失性)非易失性存储器是否易失取决于断电之后数据是否可以保存 相当于计算机的硬盘和内存的关系RAM :Random Access Memory 随机存储器 已经指代了半导体类型的易失性存储器DRAM Dynamic RAM 动态随机存储器每一个存储单元(bit)以电容的电荷来表示数据电容被充电到3.3V 来表示逻辑1低于1...原创 2019-09-15 15:39:08 · 207 阅读 · 0 评论 -
对于 STM32 中断的理解
NVIC EXTI PRIPHER完成一次完整的中断请求并响应需要三/四种外设来共同完成例如 将GPIO作为中断的处理流程一个GPIO正在工作1. GPIO初始化。包括外设时钟,管脚,速度,模式等。某一时间点 GPIO发生变化(可能是电平由高到低或由低到高) 需要请求一次中断2. 将GPIO脚连接到EXTI line。这是通过写AFIO下的EXTICR寄存器实现的。(一共有20条EX...原创 2019-08-12 15:34:42 · 1402 阅读 · 0 评论 -
串级PID_平衡小车调节历程
一开始只用单环的时候,我发现结果总是与我事与愿违,因为我希望用小车车身角度(roll)作为反馈作用于PID算法,输出值经过处理映射到PWM值上来作为电机的驱动。这个环导致的结果是,角度到达期望值时角速度还是存在的,这时参数十分难调,小车会在期望位置上左右摇摆。在读完这篇文章后:飞控算法中双环串级PID如何理解? - zinghd的回答 - 知乎https://www.zhihu.com/question/293450508/answer/1173064155我才懂得:你的期望值是什么其实完全取决于你原创 2020-08-18 15:54:54 · 2378 阅读 · 1 评论 -
stm32定时器配置——编码器与PWM产生
CUBEMX配置编码器模式选择的encoderMode是 TI1和TI2模式。这种模式下,AB两相的上升沿和下降沿都会计数,所以计数值是实际值的4倍,需要做分频。也就是第一个参数,分频值设为3,实际上是3+1=4分频。HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);//开启编码器模式enc1 = (uint32_t)(__HAL_TIM_GET_COUNTER(&htim2));//获取定时器的值PWM产生prescaler的目原创 2020-08-24 13:25:58 · 2461 阅读 · 6 评论 -
STM32红外遥控(HAL库源码)
以 NEC协议为例,采用PWM脉冲宽度调制,利用脉冲宽度来表示 0 和 1 。协议数据包组成:同步码头、地址码、地址反码、控制码、控制反码同步码由一个 9ms 的低电平和一个 4.5ms 的高电平组成地址码、地址反码、控制码、控制反码均是 8 位数据格式(发送时低位在前 高位在后)用反码是为了增加传输的可靠性每一帧的数据为8*4=32位数据以利用脉冲宽度表达逻辑上的0与1一个脉冲对应 560us 的连续载波一个逻辑 1 传输需要 2.25ms(560us 脉冲+1680us 低电平)一原创 2020-08-28 10:39:12 · 4915 阅读 · 2 评论 -
HAL库_串口_stm32-OPENMV
目标 openmv检测小球中心位置 通过串口发送给STM32:重点在于小球位置数据的打包解包openmv的python代码:import sensor, image, timefrom pyb import UART#串口设置uart = UART(3, 19200)uart.init(115200, bits=8, parity=None, stop=1) #8位数据位,无校验位,1位停止位、#所需颜色阈值green_threshold = ( 0, 80, -70,原创 2020-07-28 18:45:10 · 1762 阅读 · 3 评论 -
HAL_UART_Transmit和Printf
上位机接收到这俩函数发送的数据 (与数据的不同进制表达无关)都会将数据转换为对应的ascill码字符显示如果使用printf时格式化字符串的结尾带上\r\n则会按十进制显示原创 2020-08-31 16:47:20 · 3405 阅读 · 0 评论 -
HAL库下串口接收中断接收OPENMV发送的信息
最小系统:STM32F103RCT6开发环境:STM32CUBEIDE实现功能:OPENMV作为上位机发送识别物体后获取的坐标信息,加上帧头帧尾表示信息结构举个例子,如果你需要发送两个坐标(x,y),发送的坐标信息之间没有间隔。那数据流应该是这个样子:xyxyxyxyxyxy单片机在接受时很容易分不清本次接收的值是x坐标还是y坐标。所以直接发送直接接收是不可行的。我们可以定义自己的数据包,定义帧头帧尾 将自定义规则的数据放在中间(不追求严谨可不考虑校验位)。代码:/* * protol.h原创 2020-10-09 15:06:55 · 1052 阅读 · 0 评论 -
STM32定时器中断
配置流程:1 配置时钟源2 配置prescale 和 count period一般把prescale配置为 1 / clock * prescale = 1ms然后把count period 配置为 所需时间/1ms3 配置NVIC使能中断4编写中断服务函数需要到cubemax生成的中断处理函数中找到一个回调函数(虚函数) 并在main中重写...原创 2020-07-25 14:44:00 · 893 阅读 · 0 评论 -
HAL库的DMA发送问题
MDA发送异常今天第一次使用HAL库的串口发送DMA配置为NORMAL模式,开启DMA发送和接收,开启串口中断,遇到的问题:如果我这么写 他会发一次 char * s="asdd\r\n"; HAL_UART_Transmit_DMA(&huart2,(uint8_t *)s,5);如果我这么写 他还是只发一次 char * s="asdd\r\n"; HAL_UART_Transmit_DMA(&huart2,(uint8_t *)s,5); HAL_UART原创 2020-10-19 11:27:56 · 2751 阅读 · 1 评论