Stm32
zaohang
这个作者很懒,什么都没留下…
展开
-
MMR901XA 使用微库压力值显示错误 调试笔记
我用STM32F107片子对压力传感器MMR901XA 进行控制采集气囊压力值,在使用中为了能使用printf打印输出压力值,于是对printf进行了重定义,因为printf()之类的函数使用了半主机模式,使用标准库会导致程序无法运行,所以使用微库(如图1所示)进行编译,但是发现打印出的压力值出现错误。图1解决方法是仍然使用标准库,在主程序中添加下面的代码:/*为确保没有从 C 库链接使用半主机的函数,因为不使用半主机,标准 C 库 stdio.h 中有些使用半主机的函数要重新写 ,您必须为原创 2021-01-14 11:39:03 · 435 阅读 · 0 评论 -
[转载] STM32程序死在BEAB BKPT 0xAB解决办法
STM32程序死在BEAB BKPT 0xAB解决办法shaynerain2018-11-27 21:49:261117已收藏2版权最近做STM32无线IAP,调试时发现的问题,把程序改回原启动地址时候出现死机情况,仿真后发现程序一直卡死在 BEAB BKPT 0xAB,找到几个解决办法 MDK选择设置,TARGET ,勾选Use MicroLIB 2、直接复制进去以下代码,声明一下,这个引用的是正点原子的 #if1 #pragma...原创 2021-01-14 11:19:39 · 2191 阅读 · 1 评论 -
【转载】【stm32】一键下载电路
【原创Nerute】 2018-11-18 01:11:10 2361首先感谢正点原子的开源资料!下面贴上正点原子一键下载电路的原理图。很显然,核心是一块CH340芯片,什么是CH# 学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点原创 2020-11-27 14:48:48 · 5053 阅读 · 1 评论 -
利用重复寄存器产生确定数量的PWM脉冲信号
我使用的是TIM1产生PWM脉冲1、下面是定时器的初始换函数。我设置的重复计数器的值是38,注意实际产生的PWM波形是38+1=39个。如果设置为0,则就是产生1个。void TIM1_PWM_Init(u32 arr,u32 psc){ //此部分需手动修改IO口设置 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitType原创 2020-11-23 21:02:15 · 785 阅读 · 0 评论 -
【转载】CubeMX使用高级定时的重复计数功能实现制定个数脉冲PWM
CubeMX使用高级定时的重复计数功能实现制定个数脉冲PWM1、配置定时器1的PWM通道2、配置高级定时器参数3、开启更新中断4、生产工程斌启动定时器和PWM输出5在更新中断回调函数中关闭PWM输出6下载编译从逻辑分析仪得出的波形满足我们设置的10个脉冲结果...原创 2020-11-02 20:09:02 · 978 阅读 · 4 评论 -
使用stm32F407的TIM1产生PWM打开和关闭
在调试中发现关闭TIM1产生的PWM信号时,通过关闭定时器指令TIM_Cmd(TIM1, DISABLE); 会有不确定的高电平输出。使用TIM_CtrlPWMOutputs(TIM1, DISABLE);关闭引脚的PWM输出功能可以正常的关闭PWM输出。原创 2020-10-21 10:38:14 · 8569 阅读 · 1 评论 -
STM32F407使用定时器1产生PWM
1、项目中需要产生PWM信号,原子的例程中是通过TIM14产生PWM信号,然后我以为在初始化函数中只是简单的将TIM14替换为TIM1,程序就可以运行,忽略了TIM1是高级定时器,TIM14为通用定时器。部分功能TIM14中没有,初始化中也没有初始化TIM1中的部分功能,所以在修改TIM14的初始化程序中要添加TIM1中的寄存器,一定要把定时器中必要的所有寄存器全部进行初始化。代码如下。void TIM1_PWM_Init(u32 arr,u32 psc){ // TIM1_PWM_Init(500原创 2020-10-20 18:23:05 · 4174 阅读 · 2 评论 -
红外NEC协议【转载】
原创 2020-10-16 17:56:02 · 115 阅读 · 0 评论 -
【转载】ucos-III中,利用stm32内核的一个计时时钟来测量程序运行时间
ucos-iii 源码中,有一个功能是测量关中断时间的功能,使用的是STM32的时间戳,即记录程序运行的某个时刻,如果记录下程序前后的两个时刻点,即可以算出这段程序的运行时间。ucos 时间戳使用的是 Cortex-M内核中的一个时钟计数器来实现的,内核时钟跳动一次,该计数器就加1,精度非常高,决定于内核的频率是多少,如果是F103系列,内核时钟是72M,那精度就是1/72M = 14ns,而程序的运行时间都是微秒级别的,所以14ns的精度是远远够的。但是有关内核寄存器的描述的资料非常少...原创 2020-08-21 10:43:20 · 667 阅读 · 0 评论 -
HAL库中HAL_UART_Transmit函数 Timeout的意义--串口发送数据的计算
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) 这个是超时,在设置的这个时间内没有发送完成,就返回超时(HAL_TIMEOUT)原创 2020-08-13 09:29:08 · 29387 阅读 · 3 评论 -
你用过STM32F0,STM32F1,STM32F4都有什么区别。
1、F0属于Cortex-M0,F1属于Cortex-M3,F4属于Cortex-M4Cortex-M分为:M0,M0+,M3,M4,M7M0,M0+:基础版本,有过于基础,所以生产不出来高性能的STM32的单片机,功耗比较低M3:目前最主流的设计内核选型,应用范围广;M4:比较着M3的内核来说,M4处理器添加了DSP的数据(这里可以认为是浮点数)处理的指令;重点解释一下:对于CPU(不是SOC)来说,运算浮点类型的数据是很麻烦的一件事,在选型的时候,如若用应用的领域需要大量浮点数据的运算的时原创 2020-07-23 22:51:08 · 11198 阅读 · 0 评论 -
在脉冲群的干扰下,STM32F103外部中断容易误触发
在脉冲群的干扰下,STM32F103外部中断容易误触发,可以在外部中断引脚放置RC滤波器,减少干扰。原创 2019-10-29 17:12:13 · 2602 阅读 · 0 评论 -
STM32F103芯片引脚初始化时,芯片引脚被拉低
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE); GPIO_SetBits(GPIOD, GPIO_Pin_7); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7; //充电控制 控制适配器是否要接入设备 GPIO_InitStructure.GPIO_Mode = GPIO...原创 2019-09-09 17:43:05 · 1890 阅读 · 0 评论 -
STM32F103发送一包数据时,总是被强制分拆后发送。求解决方法
在项目中发现单片机在发送数据时一包数据被分拆多段发送,为了解决这个问题,使用串口中断发送数据,结果并不理想。配置了发送完成中断,发送端可以判断出一包数据是否已经发送完成,但是电脑接收端依然是接收到多包数据。配置DMA串口传输,也没有解决。...原创 2019-09-03 10:49:54 · 682 阅读 · 1 评论 -
MCU进入待机状态时应先使能电源管理,然后再设能weakup功能,否则MCU不能被唤醒
MCU进入待机状态时应先使能电源管理,然后再设能weakup功能,否则MCU不能被唤醒原创 2019-08-28 11:34:29 · 531 阅读 · 0 评论 -
使用 STM32 通用 Bootloader ,让 OTA 更加 Easy【转载】
使用 STM32 通用 Bootloader ,让 OTA 更加 Easy【转载】随着物联网时代到来,越来越多的智能设备拥有了在线升级的能力,无论是系统更新,产品功能迭代还是漏洞修复都能在第一时间抵达用户手中的智能设备。在线升级功能需要使用 OTA (Over-the-Air) 技术 ,OTA 技术简单地说就是通过网络来升级手中的智能设备,进而使用设备最新版本的功能。而 OTA 技术中必不可少...原创 2019-08-22 11:45:49 · 1230 阅读 · 0 评论 -
STM32程序中前缀MSP的意思
MCU Specific Package 单片机的具体方案MSP是指和MCU相关的初始化,举个例子就可以理解:比如串口的初始化1、我们要初始化和MCU无关的东西:例如串口协议,其中包括波特率,奇偶校验,停止位等等,这些设置和使用什么样的MCU没有任何关系,可以使用F1的MCU,也可以是F2...F4,甚至是PC上的串口。所以就把串口抽像成为一个“串口”。2、有了抽像的串口,这个“串口...转载 2018-08-02 17:31:30 · 17515 阅读 · 1 评论 -
J_Link提示找不到ULink的解决方法
此处已经选了jlink,但是还是提示不能找到ulink,解决方法勾选箭头位置原创 2018-12-04 11:21:29 · 1508 阅读 · 0 评论 -
STM32F107官方移植工程中,钩子函数中不能使用串口打印函数 APP_TRACE_INFO();
UCOSIII,STM32F107官方移植工程中,钩子函数中不能使用串口打印函数APP_TRACE_INFO(); 未找到原因。原创 2018-12-18 16:06:13 · 609 阅读 · 0 评论 -
关于UCOSIII中任务挂起和唤醒函数的注意事项
程序在运行到到 Motro_task()任务中的自我挂起函数后,Motro_task 被挂起。当程序运行到Task2的OSTaskResume(&MotroTaskTCB,&err);位置时, Motro_task解挂。程序再次调用Motro_task时,从Motor_task_num++;开始。void Motro_task(void *p_arg){ OS_ERR ...原创 2019-01-25 14:07:35 · 1525 阅读 · 0 评论 -
UCOSIII中空闲函数的使用
UCOSIII系统在空闲时才运行空闲函数,如果系统包含两个任务,这两个任务没有延时,只是单纯的对一个变量进行++,这个将不回运行空闲函数。原创 2019-01-22 16:44:05 · 533 阅读 · 0 评论 -
STM32HAL库使用总结(转载)
STM32HAL库使用总结(持续更新)1、外设初始化设置硬件无关参数,调用初始化函数,比如: TIM_HandleTypeDef TIM3_Handler; //定时器句柄 //通用定时器3中断初始化//arr:自动重装值。//psc:时钟预分频数//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.//Ft=定时器工作频率,单位...原创 2019-02-22 08:55:16 · 4551 阅读 · 0 评论 -
HAL库串口中断笔记
UART_Receive_IT(UART_HandleTypeDef *huart) 调用了 HAL_UART_RxCpltCallback(huart);UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) 调用了 HAL_UART_RxCpltCallback(huart); UART_Receive_...原创 2019-02-22 09:22:53 · 1788 阅读 · 0 评论 -
HAL库串口调试
void USART3_IRQHandler(void)调用 HAL_UART_IRQHandler(&huart3);调用UART_Receive_IT(huart);调用HAL_UART_RxCpltCallback(huart);用户可以在这个回调函数中编写自己的程序 ...原创 2019-02-22 11:36:33 · 921 阅读 · 0 评论 -
UCOSIII时钟节拍
ucos里,时钟节拍就好比是人的心脏一样重要。它对于CPU能顺利在各任务间切换有着至关重要的作用。 使用时钟源有一个特别需要注意的地方:用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。 ucos中的时钟节拍服务是通过在定时器中断服务子程序中调用OSTimeTick()实现的。 ucos要求提供定时中断,以实现延时与超时控制等功能。这个定...原创 2019-02-13 09:16:25 · 1127 阅读 · 0 评论 -
STM32F107的时钟设置
STM32F107的时钟设置STM32的库函数好像只有外部8M倍频到72M,现在用的板子外部25M的晶振,如何倍频到72M呢?解决办法: STM32F107的时钟分4步的: 1> 25MHz先除5分频到5MHz; 2> 再8倍频到40MHz; 3> 再5分频到8MHz; 4> 再9倍频到72MHz. STM...原创 2019-02-21 10:06:00 · 3007 阅读 · 0 评论 -
【转载】十进制小数转二进制小数方法
十进制小数转二进制小数方法十进制小数→→→→→二进制小数方法:“乘2取整”对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分.如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高位,最后一次得到为最低位如:0.25的二进制0.25*2=0.5取整是00.5*2=1.0...原创 2019-03-18 11:30:15 · 18709 阅读 · 0 评论 -
stm32串口空闲中断如何接受完整的不定长的一帧数据
在调试程序时发现,甲方提供的通信协议,只有帧头和信息位,没有帧尾,没有校验位。刚开始时按照甲方提供的通信协议,简单的写了一个串口中断接收程序。但是在测试中发现:发送协议FEFE,000,00000000,002,002,002,?000,设备可以正常接收,但在帧尾部添加一个字节或者减少一个字节再发送,设备依然响应。以下为错误的代码。// if(USART_GetITStatus(...原创 2019-07-05 11:49:56 · 4930 阅读 · 3 评论 -
一包数据被分拆为多包,单片机如何接受
在工作中发现,有的设备串口会出现这种问题:一帧数据也就10个字节,却被随意的分成好几包数据进行发送。这种数据单片机该如何接受数据呢?1、编写固定格式的通信协议。通信协议中应该带有固定的帧头、帧尾。如果协议携带的数据区有可能会出现与帧头和帧尾相同的字节,必须将该字节进行转义,而且还要在协议中数据长度,方便接收端判断。2、如果协议中对上面的内容包含不完整,则可以通过设定接收数据超时来判断是否接...原创 2019-08-08 14:02:50 · 673 阅读 · 0 评论 -
STM32CUBE 生成代码中断分组BUG
我使用的版本是4.26.1在设置中断分组时,在CUBE中为分组2,生成的代码HAL_Init()中 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);设置成了分组4。继续向下读函数,你会发现在HAL_MspInit();函数中 又进行了一次中断分组HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITY...原创 2018-08-02 16:45:08 · 991 阅读 · 3 评论