
嵌入式软件开发
文章平均质量分 53
wallEVA96
文明起精神, 野蛮其体魄。
展开
-
STM32的芯片无法在线调试的情况分析
在stm32的开发过程中,有时会遇到"STM No Target connected"的错误提示,这说明MDK开发环境无法与目标设备进行通信,导致无法烧录程序或进行调试, 也就是Jlink无法找到芯片。原创 2024-03-27 16:32:08 · 617 阅读 · 0 评论 -
使用英伟达的芯片输出三路pwm波形
要注意部分英伟达的驱动比较老, 没法驱动, 特别是python相关的驱动。原创 2023-08-03 14:43:01 · 607 阅读 · 1 评论 -
软件I2C通信的设计要点
软件I2C通信的设计要点。原创 2023-06-16 17:41:09 · 467 阅读 · 0 评论 -
STM32 MCU的启动过程与分散加载分析
预备知识ARM Cortex系列的MCU在复位、开机的时候, 都会从 0x00000000的内存地址上去获取向量表,用户软件也可以通过写入VTOR寄存器来修改向量表存储地址, 这个值是相当对于Flash_Base地址的偏移量, 这样就可以让程序从不同的存储位置去获取向量表, VTOR寄存器存储 向量表的基地址相对于0x000000地址偏移值。完整的向量表形式类似下图:首先0x00的地址存储的是栈指针,即MCU内核用于设置MSP寄存器的初始值, 而0x04的地址存储的是所有异常向量值的起始地址, 也原创 2021-11-03 22:07:39 · 2738 阅读 · 0 评论 -
嵌入式串口发送数据,首字节容易出现乱码
问题在进行嵌入式串口发送的时候, 偶尔会出现首字节乱码的情况。解决 LL_USART_TransmitData8(PRINTF_USART, (uint8_t) c); while (!LL_USART_IsActiveFlag_TC(PRINTF_USART)){}在每次发送完数据之后, 检查串口是否发送完成,而不是检查串口数据寄存器是否为空, 特别是在循环发送的时候, 检查数据寄存器是否为空的话,很容易出现影子寄存器被覆盖的现象, 而造成乱码。...原创 2021-06-03 22:58:07 · 1255 阅读 · 1 评论 -
基于LL库开发L0系列芯片的低功耗应用
预备stm32L0系列的低功耗有Low-power run,Sleep,Low-power sleep, Stop, Standby等5种模式, 其中standby模式最省电, 但是注意该模式会使芯片掉内存的数据, 而stop模式,只是将CPU,时钟等停止(不包括LSE,LSI时钟), ram的数据依然能被保存。低功耗模式中除了低功耗运行模式之外 Low-power modes (except for Low-power run mode) 都通过执行WFI(Wait For Interrupt)或原创 2021-05-21 15:59:49 · 1936 阅读 · 0 评论 -
模拟IIC协议驱动备忘
前言由于iic协议的通信频率不是特别高, 通过软件模拟的话, 在使用开发上, 整体会更加自由与方便。更多详情,请直接参考飞利浦的iic协议手册。代码范例/** ****************************************************************************** * @file led configure * @author wallea hu * @brief *************************原创 2021-05-05 23:46:06 · 219 阅读 · 0 评论 -
基于ll库,使用stm32L0系列的内部基准电压来进行ad测量
前言ADC转换器需要一个供电电压Vdda以及需要接入一个稳定的参考电压(Vref), 该电压作为adc转换器的上限量程, 必须稳定才能保证测得到的数字量是比较准确的。在L0系列的14引脚的mcu中, Vdda的引脚会与Vdd连接到一起。在64引脚以下的mcu中, Vdda与Vref将会链接到一起。在64引脚及以上的mcu中, Vdda以及Vref才会独立分开。在stm32中L0系列的芯片,内置了稳压调节器( ADC voltage regulator),在使能ADCAL校准以及ADC模块的时候原创 2021-04-28 14:21:00 · 3410 阅读 · 0 评论 -
通过LL库初始化STM32的硬件IIC
前言talk is cheap, show me the code, 直接砍初始化代码, 以及读写函数吧。void Configure_I2Cx_Master(I2C_TypeDef *I2Cx){ /* (1) Enables GPIO clock and configures the I2C3 pins **********************/ /* (SCL on PC.0, SDA on PC.1) *****************原创 2021-04-20 22:48:18 · 4473 阅读 · 7 评论 -
在中断中使用printf函数导致中断异常
Q: 中断中使用printf函数导致中断异常A: printf函数是不可重入函数,包含了全局变量的使用以及大量循环的使用, 而嵌入式中的触发中断执行的优先级很高, 会随时触发和打断现有代码运行顺序, 那么加载不可重入函数,会导致中断函数异常,Q:如何在stm32中使用printf函数打印串口信息A:重新编写arm库中的fputs函数(该函数会被printf调用。),使其能够通过串口输出,...原创 2021-04-12 10:23:07 · 3570 阅读 · 0 评论 -
STM32之通过isp串口烧写的原理过程
预备stm32通过boot方式的修改,可以支持三种启动方式, 其他两种比较容易理解, 本文说说通过设置boot引脚来实现串口烧写的基本过程。过程通过boot引脚选择从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序。厂家提供的BootLoade原创 2021-03-23 13:55:03 · 7032 阅读 · 0 评论 -
光流摄像头开发之stm32F4 hardfault错误(堆栈设置)
通过一天的调试,发现一旦设置中断函数就进入hardhandler。数组看了一下内存地址对应手册,也米有溢出。以为是时钟超频的问题,降频了之后依然无解。参照官网的hardfault诊断,把能试的都试了。 后来看到最后一项 关于,堆栈溢出。死马当活马医。 打开startup_stm32f40_41xxx.s, 修改了里面的堆栈大小tack_Size EQU原创 2017-03-31 21:57:23 · 1610 阅读 · 0 评论