4、bootload功能实现如下(如下方式有问题,即升级成功重启时立马断电,此时更新APP的标志位已经清空,但是ST库函数还没有完全从外部Flash读到内部Flash,此时app程序就会运行不了,要优化可以在Upgrade函数头部再增加一个配置写到外部Flash并置0,如果成功写入内部Flash则置1,如果数据还没写完就不置1并且执行复位操作。此时就...
#include "usart.h" #include "string.h" #include "stdio.h" #include "timer.h" #include "string.h" #include "stdlib.h" int main(void) { KEY_Init(); LED_Init(); USARTx_Init(USART1,72,115200); TIMER1_Init(720,50000); while(1) { if(TIM1->SR&1<<0) { LED0=!LED0; LED1=...
// x:0-14,y:0-24,单位是每个字32像素的个数,改造成LCD1525这样的屏幕,我的屏幕是480*800,总共显示15x25个汉字(类似带字库的LCD12864屏幕那样的显示方式),支持自动换行,屏幕上下自动循环,字母串自动补充空格实现对齐显示,不然汉字的一半刚好显示在屏幕结尾时候,是会乱码的 void myShow_String_15x25LCD(u8 x,u...
首先是ROM在0x08000000确实放的是startup_stm32f40_41xxx.o中的RESET 库文件是什么? 库文件就是别人已经别写好的代码库。 在代码中,我们经常会包含一些头文件,例如: #include<stdarg.h>#include<stdlib.h>#include<string.h> 这些就是...
str_receive = String((char*)buf); // 从发送器接收字符串 for (int i = 0; i < str_receive.length(); i++) // 将字符串拆分为两个字符串 { if (str_receive.substring(i, i+1) == ",") { str_number = str_receive.substring(0, i); ...
工程源码全部采用寄存器代码风格,基本上每行都有详细的注释;虽然STM32支持库函数方式开发,效率更加快,但是寄存器方式可以更方便了解CPU底层寄存器的一些配置,对以后在学习使用其他类型的微处理器是非常有帮助的。 5.1 工程文件布局 5.2 主函数代码 主函数里完成LCD屏幕初始化,按键初始化,LED灯初始化,串口初始化,FC游戏...
官方生成的MCU代码(hal库)移植到标准库的STM32教程 手头上正好有STM32的开发板和ESP-12E模块,想着控制个WS2812玩玩。到MCU开发的时候下载了生成的代码发现是HAL库的,无奈自己刚刚学习stm32,用的是标准库 ,在论坛发现关于STM32CubeMX移植的教程满天飞,标准库却寥寥无几,发现有很多群友和我一样刚刚接触不知道怎么...
string、sprintf库:SYSTEM_SUPPORT_MyString:提供一个实现了string.h大部分字符操作函数的库;具体作用看MyString.c文件里的注释 string、sprintf库:SYSTEM_SUPPORT_sprintf:提供一个无依赖的独立实现的sprint库,github开源库from:mpaland/printf;经过修改,可以实现对指定串口发送printf格式化的字符串 ...
Serial.println("向左旋转 " + String(-targetRotation) + " 步以开盖."); #endif for (int i = 0; i < -targetRotation; i++) { taskRotate(LEFT); boxdisplacement--; } } } void rotateToClose(int boxName) { int currentPosition = boxName + boxdisplacement; ...