STM32
文章平均质量分 76
研究僧-彬彬
这个作者很懒,什么都没留下…
展开
-
C 语言点运算符( . )和箭头运算符( -> )的区别(以单片机寄存器结构体定义为例)
在单片机寄存器封装的时候,一般库都会选择用地址偏移的办法完成。 #define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00) #define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04) #define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08) #define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0原创 2021-09-26 10:32:08 · 1675 阅读 · 1 评论 -
烧录器连接导致单片机以太网卡死的问题解决方案
项目背景:我的板子是野火H743挑战者,用了以太网读取雷达数据,然后用两个IO口控制一个继电器,这个继电器连接的是一个举升电机,烧录器用的是DAP,搭载的是FreeRTOS实时操作系统。系统内存在两个任务,一个任务读取雷达数据然后进行处理,一个任务负责控制IO口进而控制电机。单片机5V供电。情况如下:1.单独运行读取雷达数据任务,正常;2.单独运行电机任务,正常;3.在连接烧录器的情况下,一起运行读取雷达数据任务和电机任务,正常;4.在没有连接烧录器的情况下,一起运行读取雷达数据任务和电机任务。原创 2021-09-14 15:20:43 · 636 阅读 · 0 评论 -
STM32+HAL+FreeRTOS串口接收一批数据后随机卡死bug的解决办法与详细探索思路(发送函数和接收函数不能同时使用)
项目背景: keil5+HAL库+FreeRTOS系统+STM32H743,存在两个同等优先级的任务,一个任务通过串口读取数据,一个任务通过串口发送数据,从而与其他设备进行信息的交互。问题描述:网络调试助手以20HZ频率往单片机串口发数据,每次数据包共11字节。大概成功接收四百次之后,串口直接进不了接收中断。而串口对外发送任务正常进行,说明系统并未卡死。不想看猜想过程的可以直接滑到最后一个猜想,就是问题的解决方案。猜想1:和波特率有关系任务发送数据包一共11字节,即88bit。以20HZ原创 2021-09-09 16:06:40 · 5929 阅读 · 3 评论 -
STM32H743 UART接收中断设置与原理剖析(HAL库结合FreeRTOS操作系统)
硬件平台:STM32H743软件平台:Keil 5 采用HAL库+FreeRTOS系统初始化UART配置void DEBUG_USART_Config(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit; /* 配置串口2时钟源*/ RCC_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK原创 2021-09-01 19:00:57 · 3371 阅读 · 0 评论 -
FreeRTOS+Lwip+STM32 网卡驱动函数运行原理(网卡+wifi)
塞2564196项目背景主板是野火的STM32H743,例程也是野火附带的例程,有需要的可以去野火大学堂下载。因为野火只是给出了以太网和wifi的单独例程,而项目需要两者结合在一个工程,所以需要弄清楚两者驱动函数都是如何编写的,方便合并。Lwip网络接口函数在Lwip当中,源码作者用netif结构体来表示一个网卡接口,内含网卡的IP地址、数据接收函数、数据发送函数等。然后通过netif_add函数添加到网卡链表当中去。在源码当中存在一个ethernetif.c文件,这个文件存在5个函数的原创 2021-08-20 18:57:53 · 5756 阅读 · 0 评论 -
FreeRTOS的内核优先级必须设定为最低
调试FreeRTOS的时候遇到了一下的错误信息:Error:…\FreeRTOS\port\RVDS\ARM_CM7\r0p1\port.c,335定位到具体错误行:上面写着内核中断优先级应该为设置为最低优先级。这是为了配置 PendSV 和 SysTick 的中断优先级为最低。SysTick 和 PendSV 都会涉及到系统调度,系统调度的优先级要低于系统的其它硬件中断优先级,所以 SysTick 和 PendSV 的中断优先级应配置为最低。翻看手册可以发现,FreeRTOS系统用了一个常量原创 2021-08-06 10:20:10 · 855 阅读 · 0 评论 -
FreeRTOS中断管理
在调试FreeRTOS的时候,串口输出错误信息如下:Error:…\FreeRTOS\port\RVDS\ARM_CM7\r0p1\port.c,754PS:这种功能真好用,出错误直接定位到文件的行数。找到对应文件夹中第754行,这是个关于中断服务程序的断言语句。如果一个中断的优先级超过configMAX_SYSCALL_INTERRUPT_PRIORITY这个宏定义,却用了FreeRTOS的API函数,就会出现这句错误。FreeRTOS的API函数只能被优先级低于该宏定义的中断所调用。检查了原创 2021-08-05 17:03:03 · 1347 阅读 · 0 评论 -
STM32H743 FDCAN 发送管理分析(HAL库)
MCU:H743野火挑战者其他文章:STM32H743 FDCAN通信 接收中断如何实现如何计算并设置CAN外设的波特率(基于STM32H7和HAL库)STM32H743 FDCAN FIFO发送管理分析前言在CAN专属的消息RAM中,存在32个TX缓冲区,32个TX事件FIFO。每个里面都存在1个元素,一共有64个元素,对应64个报文。TX缓冲区每一个TX缓冲区可以配置一个ID,即对应一个报文。缓冲区内不仅仅只有报文的内容,还有报文的类型、ID等相关信息,官方定义这样一个整体叫ele.原创 2021-07-15 16:33:33 · 6781 阅读 · 8 评论 -
STM32H743 FDCAN FIFO接收管理分析(HAL库)
MCU:H743野火挑战者前言H743具备两个接收FIFO,分别是FIFO 0和FIFO 1,功能相同;H743提供的是FDCAN,FDCAN扩展帧允许单个消息中发送64个数据字节,而CAN 2.0有效负载数据最多可以发送8个字节。当FDCAN接收到报文,经过过滤器过滤后,会将报文存储到FIFO或RX buffer中(可选,本文仅分析进入FIFO)。对于标准帧,H7提供了128个过滤器;对于扩展帧,H7提供了64个过滤器,每个过滤器都有一个自己的编号。各个过滤器处于并联关系,即只要通过一个过滤器.原创 2021-07-14 17:22:03 · 8218 阅读 · 4 评论 -
STM32H743 FDCAN通信 接收中断如何实现
MCU:野火H743挑战者中断处理函数在STM32CubeMX使能FDCAN1中断0,生成keil工程。在工程里的stm32h7xx_it.c会出现这样一个函数,这个函数其实是FDCAN1的所有类型中断都会进入的,然后在HAL_FDCAN_IRQHandler(&hfdcan)这个函数进行判断,从而进入对应的回调函数。我们进入这个函数,看看它是怎么实现的。这个函数位于stm32h7xx_hal_fdcan.c文件,也就是FDCAN的HAL驱动库文件。由于此次使用的是出现新消息出现中断.原创 2021-07-14 14:51:55 · 7951 阅读 · 6 评论 -
如何计算并设置CAN外设的波特率(基于STM32H7和HAL库)
MCU是野火的STM32H743挑战者,例程基于野火的《CAN双机通信》;位时序分解STM32 的 CAN 外设位时序中只包含 3 段,分别是同步段 SYNC_SEG、位段 BS1 及位段 BS2,采样点位于 BS1 及 BS2 段的交界处。其中 SYNC_SEG 段固定长度为 1Tq,而 BS1 及 BS2 段可以在位时序寄存器 CAN_BTR 设置它们的时间长度,它们可以在重新同步期间增长或缩短,该长度SJW 也可在位时序寄存器中配置。Tq叫时间片,与 CAN 外设的所挂载的时钟总线及分频器配置原创 2021-07-12 19:06:23 · 4116 阅读 · 1 评论 -
STM32连接HC-SR04超声波测距(结合STM32CubeMX和HAL库函数)
实验说明实验平台:STM32H743 (野火挑战者)实验内容:使用GPIO激活HC-SR04超声波模块 ,接收信号。使用IO口:PC10连接TRIG,PC11连接ECHO,GND接GND,VCC接5V。STM32H743 控制器有 2 个高级控制定时器、10 个通用定时器和 2 个基本定时器,还有 2 个看门狗定时器。因为设计功能不复杂,这次主要使用的就是TIM6基本定时器,从表可以看出TIM6的时钟来源是APB1。基本上定时器 TIM6 是一个 16 位向上递增的定时器,当我在自动重载寄存器(T原创 2021-07-08 17:10:30 · 6199 阅读 · 9 评论 -
STM32 RCC-使用HSE/HSI配置时钟(以STM32MUX时钟树作为图例)
STM32 RCC-使用HSE/HSI配置时钟(以STM32MUX时钟树作为图例)原创 2021-03-11 11:29:26 · 1373 阅读 · 1 评论 -
keil引用HAL驱动库,C文件如何引用部分驱动库h文件
板子是野火的STMH743,用的是HAL驱动库产生的工程。我在自己工程想使用定时器,又懒得去弄初始化代码,于是想要把野火关于定时器例程代码直接拷贝过来。就是下面两个文件。把文件弄进自己工程,修改了一下,编译显示bsp_basic_tim.c的某些HAL库函数没有声明。我想,这些库函数不都在driver文件夹全部都有吗?为什么会显示没有声明。如下图。定时器相关的驱动库文件主要是这个,报错的函数也是在这个文件里面定义的。点开bsp_basic_tim.c,发现确实没有stm32h7_hal_tim原创 2021-07-07 19:34:38 · 2512 阅读 · 5 评论 -
针对STM32CubeMX生成的工程keil编译慢问题的解决方案
用STM32CubeMX可以快速生成STM32工程文件,生成相应的初始化函数等。但是生成后的工程keil编译起来实在太慢了。光一个LED灯循环闪烁程序就花了将近5分钟,这主要是因为HAL库文件比较多,每次都要重新编译,耗费时间比较多。原创 2021-07-06 14:51:57 · 3974 阅读 · 0 评论