stm32
文章平均质量分 83
你行你上天
专注:智能硬件,信号处理算法,数据挖掘算法,Labview虚拟仪器
展开
-
基于STM32F4的提升小波(二代小波)分解程序说明
注:本文是程序的说明和实现思路,代码见:https://download.csdn.net/download/hnxyxiaomeng/10301718一、主要思路 原始信号:OrgSig与基于MALLAT算法的小波变换不同,提升小波变换不产生数组L,只产生C数组。定义如下: DWT_C:[cD1 | cD2 | … cDN | cAN],其中cDx代表第x层的细节系数,cAN代表第N...原创 2016-11-10 21:37:51 · 5889 阅读 · 0 评论 -
SysTick的优先级是高还是低
转载自:https://blog.csdn.net/yxfabcdefg/article/details/49308329摘要 SysTick系统嘀嗒定时器是Cortex内核的部分,尤其对于有实时操作系统的软件,它一般会作为整个系统的时基,所以这个对操作系统非常重要。 SysTick 、CM3、系统嘀嗒 ...转载 2018-12-17 17:24:44 · 802 阅读 · 0 评论 -
STM32学习笔记9——stm32L072 SD卡程序移植记录
项目使用stm32L072,需要将采样的数据保存到SD卡中。SD卡程序参考ST公司的官方STM32L073Z_EVAL开发板的例程。需要修改的地方如下: 1、 修改stm32L073z_eval.h中SPI的管脚配置、AF配置; 2、 官方开发板使用了一片STM32L152CCT6扩展了STM32L073的IO口,并通过I2C接口连接。在SD卡例程中,扩展IO口用于检测SD卡是否连接好。我们原创 2017-12-17 18:40:50 · 3210 阅读 · 0 评论 -
STM32学习笔记10——stm32中结构体字节对齐问题
stm32做串口或网络传输数据时,经常需要用结构体定义帧格式。如果按照keil默认的对齐方式(4字节对齐),经常会出现结构体中补零的问题,造成帧格式错误。所以,在定义结构体类型时,最好把结构体对齐方式改为1字节对齐,防止出错。理论和方法见下面转载的文章。转载自:https://www.cnblogs.com/King-Gentleman/p/5297355.html#pragma转载 2017-12-11 18:41:09 · 8764 阅读 · 0 评论 -
STM32学习笔记9——结构体赋值问题
采用TCP/IP上报采集数据,用结构体的形式建立数据缓冲区。在对结构体整体赋初值(比如帧头之类的可以先赋值)时,发现结构体只能在定义时整体赋初值,而不能在初始化语句中赋。typedef struct{uint32_t frame_head; //帧标志uint16_t frame_len;//帧长stcSystemTime frame_time;//帧时间stcFrameP原创 2017-08-29 10:37:07 · 5011 阅读 · 1 评论 -
STM32学习笔记8——串口输出数据丢失问题
项目中采用STM32F103和AD7260进行数据采集。采集后想将数据通过串口逐点输出到上位机,然后查看数据是否正确。AD7260是采用外部中断进行采集的,当AD7260的BUSY输出下降沿后,触发外部中断,这时CPU去采集数据。 串口输出部分,我先是这么做的:在中断中采集数据的后面添加printf(串口已经重定向到printf函数)语句,每采集得到一个点后直接printf输出。上位机用软件Ser原创 2017-01-06 23:17:29 · 9432 阅读 · 2 评论 -
STM32学习笔记7——浮点数四舍五入
C 中浮点转换为整型是截断的,直接将后面的小数去掉,而不是四舍五入。 如:uint16_t(12.89)=12,而不是13。 项目中写了个小函数,将浮点数输入后,直接用7段译码管显示,用上述方法转换为整型后发现有显示误差。解决方法如下:1、定义一个四舍五入小数的宏#define ROUND_TO_UINT16(x) ((uint16_t)(x)+0.5)>(x)? ((uint16_t)(x原创 2016-12-09 21:40:48 · 11270 阅读 · 4 评论 -
STM32学习笔记6——向24C02芯片中写入浮点数
方法:用共用体(1)共用体类型定义#define FLOAT_BYTE_NUM 4 //float类型占用字节数//浮点数存储共用体typedef union{ float value; uint8_t byte[FLOAT_BYTE_NUM];} storFloatData;(2)函数定义/*******************************************原创 2016-12-08 22:04:24 · 4078 阅读 · 3 评论 -
STM32F4学习笔记5——stm32串口发送数据最高位错误问题
最近,在做基于stm32f401串口的ModBus协议通信,遇到了stm32串口发送数据的问题。花了一整天去查找问题,从ModBus协议格式、调度算法到串口配置,最终终于把问题解决,记录下来。 问题描述: ModBus协议中配置stm32f401串口为奇校验,8位数据位,1位停止位,程序如下:void uart_init( u32 bound ){原创 2016-11-08 23:37:02 · 6574 阅读 · 2 评论 -
STM32F4学习笔记4——STM32的AD用DMA方式时的请注意初始化顺序
今天无意之间看到了这篇帖子,是斑竹好久前发的~~~我突然意识到我的数据好像一直没有错位,看到这个我又试验了一下,发现把DMA_Cmd(DMA1_Channel1, ENABLE);放置到哪儿都是一样的啊~~~ 这个是原帖部分: STM32的AD用DMA方式时的请注意初始化顺序 珍情岁月(84848098) 17:19:23DMA_DeInit(DMA1_Channel1); DMA_Ini转载 2016-11-10 22:27:31 · 7701 阅读 · 2 评论 -
STM32学习笔记3——怎样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法
原文地址:http://blog.sina.com.cn/s/blog_60e5783601017vb8.html怎样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法u8 b; unsigned char c[3];b=123;c[0]= (unsigned char)((b/100));c[1]= (转载 2016-11-10 22:21:57 · 17186 阅读 · 2 评论 -
mdk 使用--C99标准的问题
使用stm32f4的一个项目中,不记得从哪里借鉴了一段代码:for (int16_t i = 0 ; i < SIG_N - 1 ; i++){FFT_DataBuf[i] = FFT_DataBuf[i + 1];}别人的工程可以通过编译的,但我的工程里就是不可以,只有将i放在main函数体一开始的地方定义。查阅资料后发现是,上述代码中i的定义方式是c99标准的。C99标准中,变量不用必须在每段代原创 2016-11-10 22:25:19 · 3832 阅读 · 0 评论 -
STM32F4学习笔记2——自建库函数整合FFT计算遇到的问题及解决方法
最近采用FFT计算信号频谱,需要先减去信号均值,参考网上看到的范例,实现了功能,代码为:arm_mean_f32(DataBuffer, SIG_N, &MeanData);for (int16_t k = 0 ; k <= SIG_N - 1 ; k++) {DeMeanDataBuffer[k] = DataBuffer[k] - MeanData;}arm_mean_f32(DeMean原创 2016-11-10 22:14:56 · 5191 阅读 · 0 评论 -
STM32F4学习笔记1——如何使用DSP库
配置 1、 安装DSP库文件 2、 配置编译环境, 上述添加是在project→options→C/C++→Define中添加,并且分割用逗号,即__FPU_PRESENT=1,__FPU_USED=1,ARM_MATH_CM4,__CC_ARM3、 在需要调用DSP函数的文件中加上#include "arm_math.h" 4、原创 2016-11-10 22:12:44 · 11112 阅读 · 0 评论 -
基于STM32F4的小波分解(Mallat算法)程序说明
注:本文是程序的说明和实现思路,代码见:https://download.csdn.net/download/hnxyxiaomeng/10301718一、主要思路 原始信号:OrgSig 信号长度:DWT_SIG_LEN 小波分解层数:N 与MATLAB类似,小波分解后产生2个数组DWT_L和DWT_C,但定义与MATLAB不同。定义如下: DWT_L:[DWT_SIG_LEN,c...原创 2016-11-10 21:42:27 · 9913 阅读 · 3 评论 -
STM32学习笔记11——HardFault_Handler处理方法
根据网络资料及自己调试经验总结如下:STM32 出现 HardFault_Handler 故障的原因主要有两个方面:1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。2、堆栈溢出。增加堆栈的大小。排查方法:发生异常之后可首先查看 LR 寄存器中的值,确定进入异常前一刻使用的堆栈为 MSP 或 PSP,然后找到相应堆栈的指针?注:在 HardFault_Ha...转载 2019-01-11 16:57:24 · 3033 阅读 · 0 评论