STM32
文章平均质量分 62
大饼酱人
目前小白菜
展开
-
stm32操作SD卡的程序
使用SPI方式,用的cube库原创 2022-12-27 22:45:00 · 424 阅读 · 0 评论 -
对CMSIS的学习(第1-3部分)
CMSIS英文全称通用微控制器软件接口标准,适用于基于Arm Cortex处理器的微控制器,为处理器和外围设备、实时操作系统和中间件组件提供接口。CMSIS是工具、API、框架和工作流程的组合,最初是基于 Arm® Cortex®-M 的处理器的硬件抽象层,后来扩展到支持基于 Arm Cortex-A 的入门级处理器;是由各芯片和软件供应商合作定义,开源。原创 2022-08-20 12:07:10 · 2895 阅读 · 0 评论 -
关于easyflash v3.3使用过程的记录
开源地址https://github.com/armink/EasyFlash开源作者的一个帖子:https://www.amobbs.com/thread-5624863-1-1.html已经更到V4了,但是使用的是ST的L4系列单片机,不能逆序写入,所以还是用的V3版本使用的时候偶尔出现过空间已满,还特别不好复现,就把源代码过了一遍关于磨损平衡不是真正的磨损平衡,只是先一直向一个扇区不断的擦写读,等把这个扇区写坏了,再往下平移一个扇区,而且是只要这个扇区里面有一次写或者擦除失败都会平移到下一扇区,V原创 2022-07-06 19:41:34 · 462 阅读 · 0 评论 -
NUCLE0 STM32L476RGT6开发板的资料整理
IDD measurement指测量供电电流跳线JP6,标记为IDD,用于测量STM32单片机的消耗,取下跳线并连接一个安培表这块板子没焊高速晶振,有的板子的高速晶振信号来自stlink上的晶振,参考,但是这块板子没有用高速晶振,如下图自带stlink下载驱动引脚定义:使用内部stlink下载,CN2两个跳线帽保持原有位置;用外部stlink下载,将CN2跳线帽取下,SB12断路器取下,按下表连接外部stlink...原创 2022-05-21 12:15:00 · 1058 阅读 · 0 评论 -
stm32l4的OTP相关操作
OTP相关文章相关论坛stm32l4只能写一次,没有锁stm32f4 有锁OTP的读#define OTP_BASE_ADDRESS 0x1FFF7000U //最大1k空间--0x1FFF73FFU 以8个字节为单位进行写入#define DEFAULT_VALUE 0xFFFFFFFFFFFFFFFF#define FlashGetChar(addr) *((char*)(addr))#define FlashGetU8(addr) *((uint8_t*)(add原创 2022-05-07 18:15:46 · 1215 阅读 · 0 评论 -
STM32L4串口不定长接受数据
之前L4串口收到的数据要不有帧头、帧尾或者协议带帧长,纯不定长的想和之前F103一样用IDLE的方式,发现不行都是用IDLE的方式,和之前用的F103还是有区别的,寄存器不一样,改了寄存器还是收不到正确数据,L4系列所提供的固件库中没有对该标志位的检测,需要我们自行添加在stm32l4xx_hal_uart.c文件中添加以下代码:参考文章思路也是借助IDLE的方式,但没有用RXNE,直接库函数HAL_UART_Receive_IT,所以用的时候要开一下串口中断使用参考文章指针的.原创 2021-04-29 14:54:39 · 691 阅读 · 0 评论 -
cubeMX中复制工程重新编译之后原工程丢失文件
转发:https://blog.csdn.net/weixin_43568615/article/details/115615820最近刚刚使用cubeMX进行工程创建,一直用的挺好的,今天又2个板要开发不同的程序,但是IO功能差不多,就偷懒说直接复制之前的工程改改名字讲个就用了。下图就是原来的工程和复制之后的工程。在MAIN工程重新打开编译之后,我瞅了瞅没啥问题,就继续使用了,然后今天去烧写XT工程的时候,发现core文件下面scr文件不见了,不见了,里面可是码了一周的代码,心里一万个草泥马路过,因转载 2021-04-24 23:11:35 · 1817 阅读 · 1 评论 -
nodemcu调试lua语言,esp8266和onenet通信
ESPlorer.jar点击open就闪退 https://www.jianshu.com/p/a2482b542f45原创 2021-04-08 21:21:45 · 884 阅读 · 0 评论 -
F103RBT6通过BC35和onenet进行双向通信
物联网卡套餐检测-流量/有效期https://www.nnhpiot.com/cardinfo 购买的话直接去淘宝搜选卡的时候注意,移动物联网卡用着还没出过问题,电信物联网卡有一个白名单,要通讯的网址如果不在白名单里面,会通讯一会自动断开,至于怎么将远端地址加入白名单可以问一下卖卡的有需要全部工程文件的三连(滑稽)后可以私聊我,目前不方便放出来(失业找工作期间接的毕业设计,担心客户查重过不了)程序功能:检测环境中的烟雾和水滴值并上传到onenet平台,超标后蜂鸣器报警,...原创 2021-04-08 20:25:44 · 454 阅读 · 3 评论 -
LORA SX1278做的收发设计 检测温湿度显示到oled
/*===========================================================================* 函数 :SPI_ExchangeByte() => 通过SPI进行数据交换 ** 输入 :需要写入SPI的值 ** 输出 :通过SPI读出的值 .原创 2021-04-07 18:47:48 · 659 阅读 · 1 评论 -
STM32通过BC28用mqtt协议连接onenet及simulate-device的使用
几个注意点:初始化的时候发送 "AT+NSOCR=STREAM,6,56000,1\r\n","OK" 经常会失败,原因是:下图,第一次成功了但是没检测到,以后就可能一直返回+CME ERROR: 4目前碰到待解决的问题:1、 给onenet发数据,平台可以收到,但是收onenet的时候总是总是"IPD" not found,打印bc28接收时发现,明明一整帧是+NSONMI:1,471,183.230.40.39,6002,4,20020000,47OK却总是收到类似下面.原创 2021-03-17 10:06:11 · 2714 阅读 · 0 评论 -
SYN531R 433M解码程序
#define _start_us_min 160 //9ms#define _start_us_max 240 //12ms#define _num0_us_min 18 //0.8ms#define _num0_us_max 28 //1.4ms#define _num1_us_min 4 //200us#define _num1_us_max 12 //600usvoid soft_count_433m(void);void so.原创 2021-03-04 11:43:29 · 3445 阅读 · 7 评论 -
使用rtthread硬件定时器中遇到的问题
用的是定时器1,奇怪的是在回调函数里面没有看见换成定时2倒是可以调用回调函数了,但是时间上差了100倍,找到原因好像是MX_TIM2_Init();定时器初始化没起作用换了个定时器16,可以了,可能是之前用定时器1 2做pwm没删干净?未验证...原创 2021-02-05 16:55:04 · 1220 阅读 · 0 评论 -
stm32上电不能复位
现象:stm32上电不能复位,但是按一下复位按钮可以复位过程:1)把boot0、mcu复位引脚和isp下载电路断开,不行 2) 把mcu复位引脚和mcu某个控制引脚间的电气连接割开,不行 3)把复位电阻从10k改为100k不行原因:stm32旁边滤波电容太多太大,导致mcu还没上电完成,复位电容已经充满电解决方法:1)把周围滤波电容适量改少改小 2) 把复位电容改大,100nf改为1uf...原创 2021-02-05 11:14:03 · 3854 阅读 · 0 评论 -
rtthread串口接收不定长数据
之前做过DMA加串口空闲中断的方式接收不定长数据,想移植过来,但是那样的话就用不上rtthread自带的信号量这个内容了,于是基于信号量做了一个不定长接收的功能,基本思路是用两个字节间的时间间隔来做区分两帧的依据,用信号量好处不用另外开定时器,代码如下:#define SAMPLE_UART4_NAME "uart4" /* 需要操作的设备 */static struct rt_semaphore rx_sem4; /* 信号量 */static rt_原创 2021-02-03 19:56:32 · 3792 阅读 · 4 评论 -
基于RTT对STM32L476进行OTA(下)
用无线方式升级目前两个思路:1是借助一个可以进行TCP连接的串口透传模块HLK7628N首先修改ymodem传输串口到7628N所在的串口将if (!rym_recv_on_device(&rctx, rt_console_get_device(), RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX, ymodem_on_begin, ymodem_on_data, NULL, RT_TICK_PER_SECOND))中的rt_console_get_原创 2021-02-02 19:03:47 · 469 阅读 · 0 评论 -
基于RTT对STM32L476进行OTA(中)
之前L431一直卡在bootloader那里的问题原因是因为硬件上用了ISP自动下载电路,如下图,实际rtthread不需要这部分电路,而且串口还会对boot0造成干扰,导致每次软复位单片机都重启不了,必须断电才行,而供电又是用的USB,所以出现了一直无法打印bootloader上电打印的提示,因为插上USB后再打开USB串口,可能已经打印完了,或者打开串口瞬间给了boot0一个异常电平,导致单片机进入自带的IAP模式把R13去掉,烧录生成的boot.bin可以正常打印了,如下图..原创 2021-01-29 16:37:06 · 575 阅读 · 1 评论 -
RT-Thread完整版入门
先入门RT-ThreadStudio参考比较常用的项目编译碰到一些奇怪问题,可以清理一下再全部构建试一下常用的快捷键,鼠标放到在某个函数上点一下,按F3进入函数体内,或者按住ctrl点击函数;Alt+左键,返回上一级;ctrl+H进行搜索;ctrl+/进行注释,再点一次取消注释关于串口的dma,下面这么写,串口2是没问题的,串口4会报错'UART4_RX_DMA_INSTANCE' undeclared (first use in this function) ua...原创 2021-01-14 17:19:08 · 3279 阅读 · 1 评论 -
使用cubemx移植RT-Thread Nano
参考没有提到的是要把系统时钟源换一下,可以换到定时器1或其它,因为系统时钟被RTT用了,会冲突点击跳转时下图问题,.s文件是组合语言源代码,汇编居多,一般是C编译产生的中间代码 关于context_rvds.s参考解决方法:把文件类型换成二进制格式再编译一下注意在board.c上除了添加#include "main.h" 还要添加extern void SystemClock_Config(void);关于动态线程和静态线程参考关于时间片和线程优先级如果在主线程m..原创 2020-12-31 18:02:07 · 655 阅读 · 0 评论 -
ArmClang: error: No license checking back-end registered with id Keil.mdkstd for feature Keil
可能原因是keil MDK版本太低,要5.26以上,或者ARM_Compiler V6.13下载32位的,不要下载64位的,MDK 许可证不支持 Arm Compiler 6.x 64-bit事实证明,MDK版本太低,32位也没用,下载了个5.27版本可以识别到32位的ARM_Compiler V6.13参考...原创 2020-07-30 10:16:02 · 1218 阅读 · 0 评论 -
基于RTT对STM32L431进行OTA(上)
之前自己写过一个bootloader,参考的正点原子,实际就是IAP,不是真正意义OTA,只是有个按键,按下后进入IAP程序,开始通过433模块接收数据,存储到指定flash区域,因为程序集成了MPU9250的MPL库,达到100多k,所以不是先存再搬,没有划分两块区域(F103内存不够),直接接收达一页数据,就存到APP区,然后全部存完跳转重启运行;能擦一页存一页有时间,是因为受433模块限制不能一次发大量数据,bin文件要分包,自己写的分包发包工具(有需要私信,发包间隙、大小可调),每帧之间有间隙时..原创 2020-08-02 11:29:30 · 979 阅读 · 1 评论 -
stm32L4的flash读写问题 CUBEMX
CB系列flash是128K,起始地址一般是0x08000000 考虑到前面要放代码 可以选在0x0801FC00,还差1K到边缘,即最后一页一般来说:HAL_FLASH_Unlock(); //擦除HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError); //解锁HAL_FLASH_Program(uint32_t TypeProgram, uint32_.原创 2020-06-07 23:18:42 · 5367 阅读 · 0 评论 -
使用FlyMcu.exe中出现的问题
显示擦除成功,但是没成功,显示设置读保护,其实没有,可能因为版本问题(0.188),有错误提示同样的电路,用ch340(L476RCT6)和CP2102(L431CT6)用的RTS、DTR电平逻辑不一样;cp2102用RTS高,DTR高的情况,不擦除不能升级,擦除后可以;用RTS高,DTR低加校验,升级失败,不加校验成功;参考...原创 2020-04-10 20:41:23 · 3836 阅读 · 2 评论 -
用CP2102出现的使能串口1后程序卡死的问题
出现情况:cp2102接到stm32的串口1,串口1接收使能后,用usb供电,正常,用3.3v供电,不正常,即一直进入串口1的接收中断;不使能接收中断,都正常;分析:3.3v供电使cp2102电平不稳定,出现rx引脚电平不稳定的情况,一直进入接收中断解决方法:将串口1引脚从没有上拉下拉模式,配置为上拉模式,不会轻易被外部电平触发...原创 2020-04-11 17:57:06 · 993 阅读 · 0 评论 -
stm32基于自带bootloader的usb下载
用的这款stmL476rct6只有boot0,boot1以寄存器的形式存在默认boot1为低电平,所以只用设置boot0引脚既可以进入usb升级模式通过判断下图寄存器位可以判断boot1默认电平需要注意的是读出的寄存器位值和实际状态相反,如下图代码用hal库,可以这么查看FLASH_OBProgramInitTypeDef my_config; HAL_FLAS...原创 2020-01-13 16:31:18 · 3326 阅读 · 0 评论 -
19.4----19.11知识点复盘
关于电池:好多开关电源供电没问题的板子,上电池供电可能会有问题,比如稳压芯片tps5430如果直接输入接电池,八成炸;无线充电线圈电池供电,两个线圈离特别近会烧线圈表示电池倍率/速率单位“C“,1000MAh为例,1C是电池以1A强度放电可以放1小时,若放电需5小时即0.2C电池充电速率过快和过度使用不好用稳压二极管,一般要串个电阻,否则容易炸二极管,电阻过大,达不到击穿状态,也不...原创 2019-12-02 00:44:50 · 1528 阅读 · 2 评论 -
STM32F1 Series 1.8.0 的一个bug __HAL_TIM_SET_CAPTUREPOLARITY出问题
原厂库有个问题 https://community.st.com/s/question/0D50X0000B8j1TmSQI/package-for-stm32f1-series-180-trouble解决方法https://blog.csdn.net/u012376741/article/details/100187953__HAL_TIM_SET_CAPTUREPOLARITY(&a...原创 2019-10-18 17:15:09 · 2842 阅读 · 6 评论 -
GPS-UBLOX M8N+u-center使用
GPRMC是GPS推荐定位信息,GBRMC是北斗推荐定位信息,GNRMC是北斗和GPS推荐定位信息调试模块可以用u-center软件,图中标出来的是配置按钮,如果更改完设置要保存到flash才能不丢失,保存如下图点击图中画圈按钮可以查看发送的二进制数据,上图更改GPS发送数据格式,选中UART1,就会从这个串口发送GXRMC(一般都用这个)上图更改波特率,记得改...原创 2019-05-10 12:24:04 · 7206 阅读 · 0 评论 -
STM32批量写flash和分页写flash
批量写入flash,判断接收字符数不再变化就开始更新iap_write_appbin(FLASH_APP1_ADDR,USART_IAP_BUF,applenth);FLASH_APP1_ADDR是写入flash的地址,USART_IAP_BUF存储待更新的程序,可能很大超过30k,先存到ram,而芯片ram是48k,这样就不够用了,applenth是写入字节长度分页写入flash,实...原创 2019-05-19 21:40:13 · 3170 阅读 · 0 评论 -
用Qt写大量二进制文件自动切割成256Byte的小数据包,并按顺序依次通过串口发出,中间发送间隔可调
因为一个无线收发模块缓存器比较小,发指令可以,一次性发大量二进制文件会丢包,但是发完一小包等几毫秒由可以正常发下一包(应该是缓存区通过判断间隔时间进行了清空),这样就需要一个把大量文件切割然后按着规定间隔时间依次发送的小上位机工具,找了半天,没找到,自己用Qt写了个,在原来串口调试基础上更改而来(可见前期博客)以下是核心代码(别人写的,我就是集成应用,感谢互联网),其它的有机会上传voi...原创 2019-05-08 17:48:09 · 2270 阅读 · 3 评论 -
关于STM32RCT6的远程升级问题(IAP方式下载)
主要参考STM32F103C8T6在线升级 IAP 和 STM32 IAP在线升级教学就是通过串口向单片机烧写程序,可以参考正点原子的视频资料先要写启动引导程序,通常称为IAP程序,写到bootloader区域,这个区域自己划定,存放IAP程序的地址,其实IAP程序就是平常ICP方式下载的模式,这个启动程序你平常怎么写就怎么写,不用配置地址,直接从0X8000000开始写入,keil什...原创 2019-05-08 17:31:32 · 1337 阅读 · 0 评论 -
毕设+电路板(BTN7960驱动电路+LM2596/AMS117稳压电路+蜂鸣器+STM32F103C8T6最小系统电路)
BTN7960驱动电路:LM2596/AMS117稳压电路:蜂鸣器:STM32F103C8T6最小系统电路:注意:蜂鸣器驱动电路在主芯片是8051或STM32情况下不太一样,因为有的驱动电路工作只能工作在5v以下驱动电路用的引脚多的话,可以加一个74LVC245电压转换是12-5-3.3V电路板要求最小孔径大于0.3mm,否则有的工厂加钱...原创 2019-02-17 22:28:36 · 5295 阅读 · 0 评论 -
解决用CUBEMX生成的STM32程序中的I2C死锁问题
I2C的CUBE配置:把I2C的时钟初始化放到引脚配置前面在下面新添圈起来的几句,如下图,只有进入错误,就重新初始化,尚不完美,尚可用,另一个PB7引脚没拉高,是因为本人在程序中添加SD卡程序后,控制灯PB0的时候会受PB7影响,反应就是,程序仿真到这里,PB0会和PB7的控制状态一样,可能是bug吧,可以参考源代码...原创 2019-02-17 19:57:13 · 1741 阅读 · 0 评论 -
CUBE+SD卡读写大量数据/存TXT文件+SPI通信+电路图+源程序+软件解决热插拔
电路图如下(注,通过SPI和SD卡通信;没有在硬件上通过额外引脚判断SD卡是否存在,通过程序检测解决SD热插拔问题):CUBE配置:SPI,SD卡如何进SPI模式fatfs,先在cube的Pinout下选上FATFS下的User-defined,fatfs系统指令详解程序解决热插拔,具体见源代码uint8_t SD_Init(void){ /* Moun...原创 2019-02-17 19:42:34 · 1306 阅读 · 0 评论 -
STM32的串口接收和memset使用方法
串口接收处理程序段放在主循环里,为了防止正在处理中,一个接收中断将正处理的程序变量更新,可以将接收的数据存到临时变量里面,需要调用的时候再更新memset使用注意:头文件先包含#include "string.h",如果下式rx_temp_485_1数组是引用的别的源文件中的,注意在extern时要把数标带上,即rx_temp_485_1[10],否则sizeof出错memset(&...原创 2019-01-16 15:49:31 · 5293 阅读 · 0 评论 -
关于STM32CubeMX的一些注意点+多路DMA_AD采集+定时器+串口发送+printf+看门狗+不定长接收
这个usart2的tx引脚模式默认只有pp一种,要改成OD模式,可以直接在源程序里面改,注意再次生成后,需要再次修改要把配置生成适应另一种芯片的程序,要重新新建程序注意DMA的循环模式和正常模式区分定时器要和时钟一致其他系列教程参考http://www.waveshare.net/study/article-629-1.html要下载cube中文使用手册和HAL库参考h...原创 2018-11-28 21:59:48 · 2055 阅读 · 0 评论 -
STM32的堆栈
堆栈是RAM的一个区域,只有在程序运行的时候占用RAM在stm32的启动文件.s文件里面,就有堆栈的设置,其实这个堆栈的内存占用就是在上面RAM分配给RW-data+ZI-data之后的地址开始分配的。堆:是编译器调用动态内存分配的内存区域。栈:是程序运行的时候局部变量的地方,所以局部变量用数组太大了都有可能造成栈溢出。堆栈大小只有在程序运行后才能知道,如果堆栈溢出,就会进硬件错误...原创 2019-07-07 18:33:20 · 1254 阅读 · 0 评论 -
关于远程升级后的程序和有线下载的程序表现不一样的解决方法
如果编译器的下载地址偏移和中断里面的中断偏移都设置正确(一致且合理),那么剩下的原因可能是中断没处理好我遇到的问题是,无线下载PWM有一路不能用,但有线下载可以:在引导程序跳转前要__disable_irq() ; //关闭总中断在主程序里面__enable_irq() ; //打开总中断另一个问题:无线更新后的程序总是卡在串口接收循环里面:升级程序用的普通串口接收,APP程序是DMA和...原创 2019-07-07 18:47:04 · 274 阅读 · 0 评论 -
本杰明电调源代码重要变量追踪图
ADC_V_L1 // 相电压 第一分支->mcpwm_detect_voltages[detect_step] = ADC_V_L1 - vzero // 相电压和零点(电源电压一半)的差值->m_ph1_samples[m_sample_now] = (int16_t)mcpwm_detect_voltages[0] //m_sample_now电压采样...原创 2019-09-19 13:37:26 · 5558 阅读 · 4 评论 -
iap升级后定时器混乱
跳转前关闭所有中断,跳转app初始化完后再开启,定时器初始化尽量放在前面,最好设置完中断向量表后就初始化原创 2019-09-11 17:36:10 · 413 阅读 · 0 评论