STM32
文章平均质量分 50
主要是对Stm32开发的一些见解,有错误,求大家指正,一起共同进步
浮若于心
一生,求知求解.....
展开
-
数据结构位域分析
数据结构位域分析。原创 2022-08-16 19:11:28 · 269 阅读 · 0 评论 -
C语言中attribute的应用
attribute的经典应用原创 2022-08-03 21:36:15 · 1719 阅读 · 2 评论 -
FreeRTOS的软件定时器配置与使用
定义软件定时器句柄 定义初始化,开始,停止和回调原创 2022-06-11 14:58:07 · 939 阅读 · 0 评论 -
数据结构:链表,栈和队列,串,数组和广义表,树和二叉树
第一章:时间复杂度的关系:O(1) < O(log2n) < O(n) < O(n * log2n) < O(n^3) < O(2^n) < O(n!) 复杂度越大,执行越慢。 空间复杂度:定义一个数组作为中转量为O(n),定义一个普通变量t,为O(1)。 数据的逻辑结构:线性结构:(线性表,栈,队列,字符串,数组和广义表) ...原创 2019-10-21 17:10:23 · 603 阅读 · 2 评论 -
物联网面试必过要点
一个指向指针的的指针,它指向的指针是指向一个整型数int **a;一个有10个指针的数组,该指针是指向一个整型数的int *a[10];一个指向有10个整型数数组的指针int (*a)[10]一个指向函数的指针,该函数有一个整型参数并返回一个整型数int *a( int ){}一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数int (* a[10...原创 2019-11-30 17:10:41 · 4767 阅读 · 2 评论 -
探索Keil常用调试方法,由浅入深,逐步经典,令人着迷
前面几点一般人知道的操作1,变量添加到Watch作用:可以在调试过程中随时看到变量值的变化操作方法:选中变量,右键成功添加:这个是16进制显示,转为10进制显示:把勾选去掉:2,变量添加到memory作用:可以在看到变量地址的情况下看到变量数据的变化。添加成功后:可以通过上面添加的Watch知道该变量的起始地址是没有问题的。后面的就是每字节的数据,最大为FF算出来还是跟Watch中看到数据一样。这个是按照低地址位放在地位,比...原创 2021-07-20 19:37:06 · 13429 阅读 · 24 评论 -
FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive
xQueueCreate原型:portBASE_TYPE xQueueReceive( xQueueHandle xQueue, void *pvBuffer, portTickType xTicksToWait );原创 2021-06-11 10:40:51 · 20707 阅读 · 9 评论 -
生成随机数函数:rand和srand
头文件为:stdlib.hrand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX 是<stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。#include <stdio.h>#include <stdlib.h>int main(){ int a = rand(); printf.原创 2021-05-06 19:01:01 · 737 阅读 · 4 评论 -
BLE低功耗的设置参数
广播间隔:两个相邻广播事件之间的时间称为广播间隔。可以选择“20ms ~ 10.28s”不等的间隔,通常,一个广播中的设备会每一秒广播一次。必须是“0.625ms”的整数倍。由于设备间的时钟会不同程度的漂移,两个设备可能在很长一段时间同时广播而造成干扰。为防止这一情况的发生,除定向广播之外的其他广播类型,发送时间均会被扰动。实现该扰动的方式为,在上一次广播事件后加入“0 ~ 10ms”的随机延时。这意味着,即使两个设备广播间隔相同,并在相同信道及时间点上发送造成了冲突,但它们发送下一个广播事件时也会有原创 2021-04-27 20:27:47 · 1362 阅读 · 1 评论 -
BLE低功耗蓝牙基础配置
协议栈的基本框架需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用。其中主要讲述协议栈的组成与功能:PHY层(Physical layer物理层)。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。 LL层(Link Layer链路层)。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同.原创 2021-04-27 19:57:45 · 1053 阅读 · 0 评论 -
KEIL编译器设置RAM数据复位后不被初始化数据
第一种,编译器设置:这样设置RAM2,,,前提是你的RAM空间要有0x8200的大小,,,我只是举一个例子。在用at指定空间就可以了,比如:unsigned char APP_MAC[6] __attribute__((at(0x20008000)));这样只要不带电属于热启动就不会被初始化第二种:1. 修改分散加载文件sct,增加一个名为MYRAM的执行节,该执行节起始地址为0x1000A000,长度为0x2000字节(8KB),由UNINIT修饰:在sct文件中这..原创 2021-04-20 21:08:52 · 3291 阅读 · 0 评论 -
HEX文件解析
开头数据::020000041004E6:1000000000800020119B0510AD8D0510A98F0410F4每行从“:”(0x3a)开始,这从文件内容可以看出。以回车键结束(0x0d,0x0a),每行以换行结束。回车换行的十六进制不会显示。现在开始解析:第一句后面的数据位数 数据起始地址 数据类型或叫功能码 数据 校验位 0x02 0x00 0x00 0x04 0x10 0x04 0xE6 数据类型共有.原创 2021-04-02 15:45:35 · 985 阅读 · 2 评论 -
将多个HEX文件合并成一个HEX文件通过KEIL进行烧录
首先这多个HEX文件自己已经偏移好了,hex文件已经记录了偏移的地址信息。用记事本打开第一个hex文件:test1.hex:020000040000FA文件头记录:1000000018F09FE518F09FE518F09FE518F09FE5C0程序区开始…………(中间的省略)……:080690002C2100000000000015程序区结束:0...原创 2021-04-02 12:04:05 · 2978 阅读 · 2 评论 -
ST芯片使用串口 + DMA接收 + 空闲中断处理,有USART1和LPUART
普通串口:USART1首先是DMA初始化//DMA初始化void MX_DMA_Init(void) { /* Init with LL driver */ /* DMA controller clock enable */ LL_AHB_EnableClock(LL_AHB_PERIPH_DMA); /* DMA interrupt init */ /* DMA_IRQn interrupt configuration */ NVIC_SetPriority(原创 2021-03-24 20:02:28 · 1384 阅读 · 0 评论 -
STM32中独立看门狗的配置
我自己使用的是独立看门狗由内部专门的 32Khz 低速时钟(LSI)驱动。主要自己查手册看LSI是多少就是多少。LL库中的配置:void MX_IWDG_Init(void){ /* Enable APB0 indipendent Watchdog peripherals clock */ LL_APB0_EnableClock(LL_APB0_PERIPH_WDG); /* Force WDG peripheral reset */ LL_APB0_ForceRe.原创 2021-02-24 10:23:52 · 1209 阅读 · 0 评论 -
C语言STM32中时间戳的简单配置
头文件:#include "time.h"在time.h文件中找到:struct tm { int tm_sec; /* seconds after the minute, 0 to 60 (0 - 60 allows for the occasional leap second) */ int tm_min; /* minutes after the hour, 0 to 59 */ int tm_hour; /* .原创 2021-02-24 10:07:56 · 3324 阅读 · 0 评论 -
ST-Bluenrg-lp芯片编程因为地址重叠导致常量值被更改
所遇问题:定义的结构体,用于限制范围大小。类似于:struct test SysParaMax = { .test1= 5000, .test2 = 5000, .test3 = 100, .test4 = 600,}struct test SysParaMin = { .test1= 0, .test2 = 0, .test3 = 0, .test4 = 0,}结果作为范围限制使用的时候,因为debug才查看到的原创 2021-01-08 21:12:32 · 585 阅读 · 2 评论 -
keil报错:Symbol set_value multiply define和 incomplete type is not allowed和error: #65: expected a “;“
Symbol set_value multiply define: 这个错误意味着set_value这个符号(通常是变量或函数名)被多次定义了。在C/C++中,每个符号只能有一个唯一的定义。这可能是由于在多个源文件中重复定义了set_value导致的。原创 2020-12-08 22:40:14 · 1692 阅读 · 0 评论 -
STM32F407写超声波传感器HC-SR04程序
1.给超声波模块接入电源和地。2.给trig输入一个长为20us的高电平方波3.输入方波后,模块会自动发射8个40KHz的声波,echo的电平会由0变为14.当超声波返回被模块接收到时,回波引 脚端的电平会由1变为0。定时器记下的这个时间即为超声波由发射到返回的总时长。5.根据声波在空气中的速度为344米/秒,即可计算出所测的距离。以下为程序:#include "stm...原创 2019-03-07 12:53:21 · 8161 阅读 · 44 评论 -
STM32F407使用串口3获取攀腾G7的PM2.5数据
STM32F407使用该程序主要是复用串口3用来接收PM2.5所发出的数据,然后获取所需要的pm2.5的值,引脚接口为pb11和pb10,5v电压。void uart3_init(u32 bound){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClo...原创 2020-10-28 17:01:48 · 986 阅读 · 5 评论 -
解决更换芯片原程序不能正常编译问题 和问题ErrorFlash Download failed Cortex-m3
当从这个芯片更换为这个芯片时编译原程序后出现了这个问题解决办法为:把其中的STM32F10X_HD,删掉编译成功烧入时出现:第一种可能没有正确添加点击add正确添加:第二种里面没有合适的则首先需要安装一个跟自己芯片匹配的一个环境库,比如:安装好后在C/C++添加路径:再看就有需要添加的了:最后烧入成功:...原创 2020-06-23 14:29:32 · 811 阅读 · 0 评论 -
设置PWM占空比中TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4分别对应引脚和ADC通道对应引脚
这个函数TIM_SetCompare1,这个函数有四个,分别是TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4。位于CH1那一行的GPIO口使用TIM_SetCompare1这个函数,位于CH2那一行的GPIO口使用TIM_SetCompare2这个函数。使用stm32f103的除了tim6和tim7没有PWM...原创 2020-06-04 11:39:46 · 26528 阅读 · 0 评论 -
PCB板中字母代表的含义
R:电阻J:跳线D:二极管或稳压管Q:三极管C:电容U:集成芯片L:电感FB:熔断保险丝IC:芯片T:变压器ZD:稳压二极管P:有时表示端口(插座等)原创 2020-06-01 14:27:26 · 55683 阅读 · 5 评论 -
stn32cubemx生成代码有问题的解决方法
问题1,生成代码时,有显示你的生成目录还说一个问题的问题,就是环境没装好,要装一个java的环境即使你本来已经装了这个环境,但是还是出现了同样的问题,那就装我这个版本,我刚才使用这个版本就成功了问题2,就是要下相应的固件manage enbadded software packages这样基本就没问题了,不过网上还经常说,生成目录的时候,相应的路径和文件名最好改成英文...原创 2020-04-23 23:14:11 · 1347 阅读 · 0 评论 -
STM32F407控制180度舵机
其中主要分为两部分,时钟的初始化和主函数的控制部分。时钟的初始化:选用TIM14时钟,F9引脚作为信号控制引脚void TIM14_PWM_Init(u32 arr,u32 psc){ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBas......原创 2020-04-05 15:04:43 · 3630 阅读 · 63 评论 -
stm32使用sd卡保存数据不擦除原本数据,数据格式换行
驱动sd卡的程序,主要是使用原子的FATFS程序。首先是向卡里写数据和读数据的操作。这些定义一般都在ff.h文件中先定义好FIL fil;FRESULT res;UINT bww;char buf[100];写读操作: res=f_open (&fil,"0:/message.txt", FA_OPEN_ALWAYS|FA_WRITE); ...原创 2020-02-27 14:05:03 · 2550 阅读 · 2 评论