STM32
恋雪1986
这个作者很懒,什么都没留下…
展开
-
keil配置After Bulid Run #1 Run #2
虽然做嵌入式开发这么多年,但是没有关注过keil options选项卡中配置After Build/Rebuild Run #1 Run #2是怎么配置的,今天就来记录一下。首先,下图中Run #1中的cmd是keil自带的,fromelf --bin --output=$L..\@L.bin #L先看一下命令解释:$L:表示生成的链接文件的路径,一般是工程路径下的\objects\@L: 表示生成的链接文件的文件名(包含路径),但不包含文件扩展名#L:表示生成的链接文件的完整路径名及文件名.. :表原创 2022-07-06 11:13:00 · 3488 阅读 · 0 评论 -
KEIL工程boot跳转失败,死在rt_system_scheduler_start()问题的解决
遇到的问题:app工程是基于RTT的工程,boot跳转到APP时,每次执行到rt_system_scheduler_start()这个函数后就复位,进入不了main函数,debug跟踪调试进入到rt_system_scheduler_start()原创 2021-06-08 15:24:46 · 1708 阅读 · 1 评论 -
keil 定位hardfault
首先,在程序中我设置了一个hardfault:然后运行程序程序复位,通过log打印可以看到通用寄存器的值:我们主要看lr的值,然后debug调试程序,打开keil的Disassembly窗口,在View菜单中,拖动鼠标找到0x800d7b1这个位置(大概位置就可以)出现hardfault的地方就在lr地址后面的地址出的代码:我们双击D7B2这个地址,代码跳转到这个函数中,仔细检查这个函数没有问题,推测可能是调用此函数的地方出现了问题:可以看到第一张图中我们设置的ha.原创 2021-05-18 15:26:11 · 961 阅读 · 0 评论 -
HAL_PWR_DisableBkUpAccess();影响RTC定时唤醒
设置完RTC定时唤醒后,如果调用了HAL_PWR_DisableBkUpAccess();这个函数会导致RTC无法唤醒;void rtc_wkup_set_time(uint16_t ms){ __HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_EnableBkUpAccess();//设置RTC唤醒前需要先执行备份区使能,并且保证备份区不会使能,否则低功耗后唤醒不了 HAL_RTCEx_DeactivateWakeUpTimer(&hrtc)...原创 2021-04-30 15:58:06 · 814 阅读 · 2 评论 -
对于MCU看门狗IIWDG WWDG喂狗时间的配置参考
对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;在每个MCU的datasheet中都有这样的表格:6.3.25 Timer characteristicsF091的:可以封装接口进行看门狗的配置,参数传入ms时长:以091为例代码实现如下(看门狗是40KHz):/** * @brief config 内部独立看门狗. * @param ms:看门狗时间长度 * @retval None */uint8_t .原创 2021-04-21 11:14:49 · 981 阅读 · 0 评论 -
HAL库的HAL_GPIO_ReadPin()使用总结
HAL库readpin的函数使用起来有以下总结:当一个pin脚设置成OUTPUT的时候,那么使用HAL_GPIO_ReadPin()函数能不嫩读取出这个pin脚的值呢???很多人都认为HAL_GPIO_ReadPin()只是用来读取配置为INPUT模式的pin脚的,其实它也可以读取配置为OUTPUT的pin脚状态;但是,这里加个但是,当pin配置output时,想要读取pin的状态时,对于推挽PP和开漏OD模式是有区别的;当配置为GPIO_MODE_OUTPUT_PP时,使用HA...原创 2021-04-08 10:07:06 · 20209 阅读 · 0 评论 -
gpio模拟uart 发送
用GPIO模拟UART输出一个字节,波特率9600,所以周期约为104us。这就需要用的精确的usdelay延时函数;延时函数可以用Cortex-M内核中的DWT计数器。另外还需要将GPIO配置成output模式;延时函数实现如下:delay.h//延时实现#define DWT_CR *(__IO uint32_t *)0xE0001000#define DWT_CYCCNT *(__IO uint32_t *)0xE0001004#define DEM_.原创 2021-04-01 14:43:39 · 1234 阅读 · 0 评论 -
STM32L431 MCU温度计算
找到L431参考手册上的MCU温度计算公式:在L431的datasheet上找到下面的地方:通过上面两张图,可以知道mcu温度计算公式,可公式中用到的值,注意这里的校准值是在3.0V下校准的,如果你的单片机是用的3.3V供电,就需要转换一下系数3.3/3.0;MCU温度计算公式:代码实现如下:#define TS_CAL1 ((uint16_t*)((uint32_t)0x1FFF75A8)) //TS ADC raw data acquired at a tempera..原创 2021-03-29 10:29:49 · 1249 阅读 · 0 评论 -
L431 keil debug 进入不了main函数
通过cubemx5.5.0生成stm32L431芯片的KEIL工程,但是在调试的时候发现进入不了main函数;尝试过很多方法,都不行,程序能下载进去,jlink也能连接上,就是无法进入main函数;debug调试看着汇编窗口也在跑;用镊子短接了一下复位引脚还是不行;最后把jlink拔下来,重新开关了下电源竟然程序跑起来了。猜测原因:之前一直在芯片的引导区跑,一直没进入程序运行区,也就是可能是reset复位的问题导致的;这次运行起来后,每次debug就都能进入main函数了。有可能..原创 2021-03-10 15:57:12 · 1136 阅读 · 0 评论 -
gpio模拟串口uart接收数据(HAL库)
GPIO模拟uart的原理就是根据所需要的uart的波特率,计算出每个bit所用的时间,在此时间段内去读取gpio的输入,然后将读取的8bit拼接起来即可,当然这期间要检测起始位和结束位。uart的起始位是下降沿,结束位是上升沿。为了检测准确,我们读取每个bit的中位位置,所以定时时间是每个bit位所占用时间一半。9600波特率的uart模拟,每个bit位的时间是:1/9600 s = 104us的时间,那么半个bit位的定时时间就是104/2 = 52us。所以在检测到下降沿后,接着打开定时.原创 2020-12-08 14:16:45 · 1746 阅读 · 0 评论 -
keil包含了头文件仍然提示找不到定义 解决方案
简单粗暴,直接说明解决方法和问题原因:一看这个图片就明白原因了吧,哈哈。头文件名定义和里面的def名定义不一致。原创 2020-11-12 15:20:49 · 15602 阅读 · 10 评论 -
STM32F0芯片HAL库利用uart+dma+空闲中断+环形缓冲区实现不定长接收和不定长发送
最近在做F091芯片的项目,利用HAL库实现uart+dma的不定长接收和发送,并且要利用环形缓冲区,达到数据接收和发送都不会进行阻塞且不会丢失的目的。网上查了很多资料,也有很多关于这种的文章,但是几乎没有一个方式完美的,不是只有发送,就是只有接收,或者发送接收都没有实现环形缓冲区,而且发送只讲了怎么使用HAL_UART_Transmit_DMA()函数,但是没有完整的实现方案。本文章就是...原创 2020-04-09 15:40:17 · 4633 阅读 · 2 评论