推荐阅读最新更新时间:2024-11-03 23:02
STM32串口DMA连续发送两帧,导致数据部分覆盖的问题
问题描述 使用STM32的串口进行DMA发送(Noraml模式),在某个任务中连续调用两次发送函数log_printf(),但是发回的数据在串口调试助手上显示与预期不符。第一次发送的数据有一部分被第二次发送的数据覆盖,如图所示: 任务代码如下: /* Log_Task function */ void Log_Task(void const * argument) { /* USER CODE BEGIN Log_Task */ /* Infinite loop */ for(;;) { if(router_rx_flag == 1) { router_rx_flag = 0;
[单片机]
【STM32】HAL库 STM32CubeMX教程七---PWM输出(呼吸灯)
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: PWM工作原理 STM32CubeMX创建PWM例程 HAL库定时器PWM函数库 PWM创建呼吸灯 什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非
[单片机]
基于STM32单片机启动文件的作用和启动过程解析
一、启动文件的作用是: 1.初始化堆栈指针SP; 2.初始化程序计数器指针PC; 3.设置堆、栈的大小; 4.设置异常向量表的入口地址; 5.配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没 有外部SRAM); 6.设置C库的分支入口__main(最终用来调用main函数); 7.在3.5版的启动文件还调用了在system_stm32f10x.c文件中的 SystemInit()函数配置系统时钟,在旧版本的工程中要用户进入 main函数自己调用SystemInit()函数。 至此可以总结一下STM32的启动文件和启动过程。首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈顶地址,
[单片机]
STM32_ BKP备份数据
今天讲解“STM32F103 BKP备份数据”,关于“BKP备份数据”这一块的知识不难,但还是需要注意几点。BKP顾名思义就是备份寄存器(见参考手册),主要用于备份数据使用的。 每天讲解的不仅仅是基础,而是重点,不起眼的重点,容易被人忽视的重点。关注微信公众号“EmbeddDeveloper”还有更多精彩等着你。今天提供并讲解的软件工程,基于前面的软件工程“TIM延时”修改而来。若有疑问,请关注微信公众号获取更多信息。 每天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。 今天的软件工程下载地址(360云盘): https://yunpan.cn/cP7FTUw4XCYNw访问密码 0ebe
[单片机]
stm32专题五:时钟树(三)自定义配置HSE时钟 超频
在前一节分析了stm32系统默认时钟配置的过程,现在想自己实现一个自定义修改时钟配置的函数。其实原理很简单,因为系统在上电复位时就会按照默认完成时钟配置。因此,要先复位时钟,然后按照流程来配置就ok,我们通过修改PLL锁相环的倍频因子,就可以实现超频。用到的所有函数,都可以在rcc.h和flash.h中找到。 bsp_rccclkconfig.c /* RCC时钟配置函数 */ #include bsp_rccclkconfig.h // 自定义时钟配置函数 void HSE_SetSysClk(uint32_t RCC_PLLMul_x) { ErrorStatus HSEStatus; // 把
[单片机]
STM32--简单的IAP操作
STM32支持在应用中编程,也就是所谓的IAP,这对产品的在线升级带来了很大方便。 在线升级的原理简介如下: 在单片机的FLASH中有两段代码,一段是IAP代码,另一段就是用户的应用程序即APP代码,IAP代码放在单片机复位时的起始地址,而APP代码则放在IAP后面的地址,上电时CPU首先执行IAP代码,再通过IAP代码跳转到APP代码开始执行。 在IAP代码执行期间,通过检测某一个事件(如IO电平)来判断是否对APP代码进行更新,如果该事件无效,则不更新,直接跳转到APP代码执行;如果该事件有效,则更新APP代码,而更新的文件则从外部磁盘通过串口或USB写入FALSH应用程序空间。 流程图如下: 当然,这只是一种最简单
[单片机]
如何在Linux下为STM32 MCU构建代码
步骤1:安装必需的软件 首先,安装必需的软件。 为ARM安装gcc编译器: gcc编译器包含用于编译,链接和构建MCU的构建代码的工具。安装以下三个软件包: gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi sudo apt-get install gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi 安装STM32CubeMX STM32CubeMX是用于生成C项目的基于Java的工具。借助此工具可以配置使用过的MCU的所有部分,例如USART,I2C,SPI,GPIO,
[单片机]
STM32定时器输出PWM 【自用】
PWM1输出模式配置: 1.配置IO(TIM3 PA6~7 CH1 CH2 GPIO_Mode_AF_PP复用推挽输出 50Mhz速度) /*void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //GPIOA and GPIOB clock enable RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //GPIOA Configuration: TIM3 channel 1 and 2 as alternate function push-pull GPIO_InitStructure.
[单片机]