完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、STM调试信息打印方法。
1. 新建stm32cubemx工程,配置工程。
2. 在stm32cubemx工程,配置工程,勾选使用FreeRtOs系统。
4. 生成工程,然后用keil打开,在源码里面添加代码,使得USART1重定向到标准Printf函数中输出。
5. 总结添加的代码如下: 记得包含标准输入输入头文件: stdio.h 在usart.c里面添加: /* USER CODE BEGIN 0 */ #include /* USER CODE END 0 */ 1 2 3 2 /* USER CODE BEGIN 1 */ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF); return ch; } /* USER CODE END 1 */ 在“user code” 里面添加,这样你再次编译生成stm32cubmx工程的时候,你的代码才会被保留,不如会被知覆盖掉。 二、STM IAP方法(基于STM32F0xx系列)。 1. stm32f0x系列IAP,基于Stm32CubeMx的工程。 下面说明如何基于stm32f0x系统里面,使用在线升级(stm32f0 IAP) Bootloader里面,main里调用函数跳转到APP地址0x8003000,下面的这个是main函数里面的主程序,分开烧录下载,一般来说,先下载这个程序用于做IAP的。 typedef void (*pFunction)(void); #define ApplicationAddress 0x8003000 void UserAppStart(void)//这里是bootloader里面的函数 { if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) { /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Jump_To_Application = (pFunction) JumpAddress;//跳转到0x8003000 /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) ApplicationAddress);初始化用户程序的堆栈指针 Jump_To_Application();//执行跳转,程序从0x8003000开始跑。 } } void main(void) { /*加入一些判断,或者*/ UserAppStart; } stm23cubemx 工程源码里面(APP) main 函数添加: #define APPLICATION_ADDRESS (uint32_t)0x08003000 /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ #if (defined ( __CC_ARM )) __IO uint32_t VectorTable[48] __attribute__((at(0x20000000))); #elif (defined (__ICCARM__)) #pragma location = 0x20000000 __no_init __IO uint32_t VectorTable[48]; #elif defined ( __GNUC__ ) __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable"))); #endif // 上面是要自己添加的 int main(void) { //自己添加的,最好在user code里面添加,不会被覆盖 /* USER CODE BEGIN 1 */ uint32_t i = 0; /* USER CODE END 1 */ HAL_Init(); /* Configure the system clock to 48 MHz */ SystemClock_Config(); /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/ /* Copy the vector table from the Flash (mapped at the base of the application load address 0x08004000) to the base address of the SRAM at 0x20000000. */ for(i = 0; i < 48; i++) { VectorTable = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2)); } /* Enable the SYSCFG peripheral clock*/ __HAL_RCC_SYSCFG_CLK_ENABLE(); /* Remap SRAM at 0x00000000 */ //拷贝中断向量到 VectorTable,stm32f0 没有中断偏移寄存器,所以将中断向量表读取到RAM中,然后重映射到RAM地址. __HAL_SYSCFG_REMAPMEMORY_SRAM(); /* Add your own code here... */ // 接下来做自己的事情,这里忽略不写........... } 在Keil下设置IROM1:start 0x8003000 IRAM1:Start 0x200000C0 记得对应自己设置的位置。
1. demo:STM32F103VBT单片机的dfu IAP功能的实现详细步骤(基于Stm32cubeMx):
2. 配置STM32F103VBT单片机的DFU(这里默认配置即可),启动地址一般位于0x08000000: 3. 生成工程,就万事大吉,启动开发板,你会发现需要你安装u***驱动, 4. 下载编译好的stm32cubemx工程DFU hex文件到开发板验证:
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1609 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1540 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1587 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
643浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
503浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 11:36 , Processed in 0.871128 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号