STM32学习笔记
文章平均质量分 81
dxmcu
QQ : 2795247843
展开
-
STM32软件复位办法
在需要软件复位的地方添加如下两句代码:12__set_FAULTMASK(1);NVIC_SystemReset();转载 2017-09-06 14:58:25 · 13314 阅读 · 4 评论 -
stm32F4 串口DMA+环形缓冲区的实现
下面是串口DMA+环形缓冲区的实现,将读写接口抽象出来,实现不定长度的数据收发。关于环形缓冲区参考:123http://blog.csdn.net/jieffantfyan/article/details/53572103/******************************************************************************转载 2017-12-27 19:01:07 · 2849 阅读 · 1 评论 -
按位定义结构体
按位定义一个结构体 struct s_DosAttributes { unsigned ReadOnly :1; unsigned Hidden :1; unsigned System :1; unsigned VolumeID :1; unsigned Directory :1; un转载 2018-01-22 16:11:34 · 1263 阅读 · 0 评论 -
物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004
自从物联网问世以来,如何使得物 能够联网有了很多的方式,目前运用非常广的WIFI,今天就总结下自这个方面,也对于有需要的盆友也希望有抛砖引玉之效果。来看个知乎上的提问,很有意思!问题:买了BroadLink的智能插座,发现有一个很神奇的一键配置功能。简单的说就是:当智能插座还没有连上WiFi的时候,此时通过手机App可以将WiFi的SSID及密码一键配置到智能插座上去。转载 2018-01-25 11:48:46 · 1737 阅读 · 0 评论 -
stm32 TIM8和TIM3初始化相互有影响
查了资料,在TIM8下面添加了下面的代码: TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OC原创 2018-01-09 19:26:54 · 2901 阅读 · 3 评论 -
u8 temp; (void *) temp 和 (void *) & temp 有什么区别,具体运算过程是啥? u8 data; u8 k=1;
u8 temp; (void *) temp 和 (void *) & temp 有什么区别,具体运算过程是啥? u8 data; u8 k=1;u8 temp; (void *) temp 和 (void *) & temp 有什么区别,具体运算过程是啥?u8 data; u8 k=1; u8 * temp=&k;data=(u8) temp 的结果是什么? temp原创 2018-01-26 11:55:48 · 3464 阅读 · 0 评论 -
STM32F10x 利用环形缓冲区的串口驱动程序
这次讲讲利用串口收发中断来进行串口通讯。STM32 上为每个串口分配了一个中断。也就是说无论是发送完成还是收到数据或是数据溢出都产生同一个中断。程序需在中断处理函数中读取状态寄存器(USART_SR)来判断当前的是什么中断。下面的中断映像图给出了这些中断源是如何汇合成最终的中断信号的。图中也给出了如何控制每一个单独的中断源是否起作用。另外,Cortex-M3 内核中还有个NVIC,可以控制这里的中...转载 2018-02-26 17:34:53 · 678 阅读 · 0 评论 -
STM32 串口采用DMA方式收发
什么是DMA —- Directional Memory Access, 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作我们通过以下几方面学习串口DMA: 一、如何理解DMA 对于DMA,打个比方就很好理解: 角色预设: 淘宝店主 —- STM32 MCU 快递员 —- 外设(...转载 2018-02-07 13:13:31 · 31911 阅读 · 13 评论 -
STM32上SPI+DMA实现大批量读取flash数据
最近做项目需要使用SPI+DMA,为了做实验感受DMA传输数据块,本人以SPI+DMA来读取flash中的数据。网上有很多例程是spi直接读取flash,无法提高性能。因为只是简单的实验SPI的DMA功能,所以在写数据时并没有考虑页写一些制约,只是简单的将1k大小的数据写入flash,然后用DMA读出这1K大小的数据,相信SPI和DMA的配置大家都很熟悉了,本人在此不在强调,只是说几点注意点的:转载 2017-11-24 17:15:01 · 15217 阅读 · 8 评论 -
位域全解析
所谓”位域“是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 它实际上是C语言提供的一种数据结构。使用位域的好处是: 1.有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。这样节省存储空间,而转载 2017-11-23 15:52:02 · 1391 阅读 · 0 评论 -
STM32进入HardFault_Handler处理办法
STM32进入HardFault_Handler处理办法HardFault_Handler出现的情况一般有两种: 一种是:数组越界 一种是:堆栈溢出,程序指针指飞方法一在中断HardFault_Handler中的while()处打上断点,让程序执行到此处停止。 在Registers里面找到R14(LR)的值,我的这里是:0xFFFFFFF9 说明一下:转载 2017-09-06 18:59:30 · 7079 阅读 · 0 评论 -
解决STM32调试,无法进入main函数的问题
昨天调试STM32程序,以前使用的是MDK3.40的版本,把版本升了下级,升到了MDK4.10,装好后,一运行,哈哈,新版本给人的感觉就是不一样啊,很爽,较之前有很多改进,把自己以前的程序打开,编译运行发现程序调试时无法进入Main函数,弄了很久,很是郁闷啊,最后还是在ourdev的坛子里,找到了同样问题的解决方法,多谢ourdev,以下是坛子里面的帖子,我把他贴出来了. sdc666 :转载 2017-09-07 09:16:11 · 16280 阅读 · 3 评论 -
C语言itoa()函数和atoi()函数详解(整数转字符C实现)
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。1.int/float to string/array:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。● itoa():将整型值转换为字符串。● ltoa():将长整型值转换为字符串。● ultoa():将无符号长转载 2017-09-28 11:46:58 · 1445 阅读 · 0 评论 -
arm编程中__packed的使用
今天在看代码的时候看到以下代码:[cpp] view plain copy struct dsi_ctrl_hdr { char dtype; /* data type */ char last; /* last in chain */ char vc; /* virtual chan */ char ack; /转载 2017-09-12 13:16:45 · 2659 阅读 · 0 评论 -
Xmodem接收的代码
Xmodem的程序可以在linux或者各种Bootloader里找到. 但是下面这个是我自己写的----2年多以前,我还没接触或"开源"的时候,想写一个自动升级程序的程序.当时主要的原因是没有烧录器,公司好几个人,就一台烧录器----感觉搬来搬去的太麻烦,效率很低,于是找了Xmodem的资料,就有了下面的程序. --------Xmodem.h--------转载 2017-10-11 16:47:00 · 1735 阅读 · 0 评论 -
状态机的c语言编程
一 有限状态机的实现方式有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。FSM的实现方式:1) switch/case或者if/else这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始转载 2017-10-11 17:42:49 · 828 阅读 · 0 评论 -
一种STM32的串口控制台的实现(非常实用)
一.背景曾经玩Linux时非常喜欢这种基于出串口的控制台, 通过简单的串口TX和RX能实现嵌入式硬件的人机交互,非常实用, 那么STM32能否实现通过超级终端与用户互动的构想呢? 答案是肯定的,由于这个UART控制平台就像应用程序套上一层可访问的外科(Shell)故而我将这种基于UART的控制平台简称Shell,构架和效果如下图:这张图箭头指向的是输入的指令,其余转载 2017-10-24 17:23:35 · 3000 阅读 · 1 评论 -
嵌入式常用算法:环形缓冲区算法
在嵌入式开发中离不开设备通信,而在通信中稳定性最高的莫过于环形缓冲区算法,当读取速度大于写入速度时,在环形缓冲区的支持下不会丢掉任何一个字节(硬件问题除外)。下面我分享一段由我原创的Ringbuffer代码。C文件:[plain] view plain copy/** **************************************************************...转载 2018-02-27 18:40:36 · 545 阅读 · 0 评论 -
怎么计算环形缓冲区长度
定义了一个数组 Buff[200],想把它设计成环形缓冲区,写指针:Ptr_ W读指针:Ptr_R问:这个读写之间的缓冲区的长度是怎么计算的呢,谢谢!用的c语言如果是线性的不是环形的话写指针一定需要在读指针后面这样分两种情况1: buffer未满的时候 size = ptr_w - ptr_r2: buffer满的时候ptr_w > ptr_r --> ptr_w - ptr_rptr...原创 2018-03-01 15:05:47 · 1186 阅读 · 0 评论 -
串口状态机的应用
以前并没有发现串口状态机的好处,最近用到了这种指定格式的数据包解析,才发现这东西非常的好用,可以对串口的数据包进行过滤只解出符合协议的数据包。这个呢其实就是一种思想,不仅仅局限于串口之间的数据传输,我认为可以用在很多指定数据协议的数据包传输解析当中。大致代码思想写在下面,希望对大家有帮助。/* 主要的变量声明在这边 *//* 串口状态机宏 */#define DATA_HEAD 3#def...转载 2018-03-01 17:15:09 · 761 阅读 · 1 评论 -
Ubuntu16.04中安装stlink驱动
系统环境:Vmware12,Ubuntu16.04Stlink version:v1.4.0一、安装依赖包:sudo apt-get install libusb-1.0sudo apt-get install cmakesudo apt-get install libgtk-3-dev二、下载源码git clone https://githu...转载 2019-03-24 13:00:10 · 3806 阅读 · 5 评论 -
Ubuntu环境下使用stlink调试和下载stm32f4-discovery程序
原创,转载标明出处首先下载stlink的Linux版本,下载地址。然后解压到你所指定的路径下,参照其中的README文件进行编译配置。如下:(笔者在此将对关键点进行标注)HOWTO=====First, you have to know there are several boards supported by the software.Those boards use a c...转载 2019-03-24 14:40:58 · 1438 阅读 · 0 评论 -
Ubuntu安装STLINK
Installing STLINKSTLINK is open source software to program and debug ST’s STM32 Discovery kits. Those kits have an onboard chip that translates USB commands sent by the host PC into JTAG/SWD command...转载 2019-03-24 14:41:38 · 1359 阅读 · 0 评论 -
STM32串口通信乱码详细处理方法
STM32串口通信以及温度采集搞定,其中主要遇到STM32系列单片机时钟树的问题,串口通信遇到串口调试助手能够接收到数据但出现乱码现象,开始一直以为是串口配置和程序代码问题,因为是第一次上电在线调试STM32板子,后面主要查串口波特率配置和收发函数程序段,如下图:波特率设置成115200没问题,试着降低波特率改成9600和4800但问题依旧没有解决,紧接着如下处理:将重定向函数注释,单独写...转载 2019-03-27 23:10:51 · 3772 阅读 · 0 评论 -
USB-JoyStickMouse移植到HID
1. 修改usb_conf.h文件#define EP_NUM (3) 改为3个端点#define ENDP2_RXADDR (0x128) 分配端点2输出ram偏移 /* #define EP1_IN_Callback NOP_Process*/#define EP2_IN_Callback NOP_Process#defin...转载 2019-04-21 13:10:18 · 651 阅读 · 0 评论 -
Modbus 通讯协议数据帧之间的时间停顿间隔 “3.5字符”定义
Modbus 通讯时规定主机发送完一组命令必须间隔3.5个字符再发送下一组新命令,这个3.5字符主要用来告诉其他设备这次命令(数据)已结束,而这个3.5字符的时间间隔采用以下方式计算:1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有)、1位停止位(一般情况下)这样说起来一般情况下1个字符就包括11位那么3.5个字符就是3.5*11=38.5位还有比如没有校验位的1...转载 2019-05-03 10:17:03 · 1210 阅读 · 1 评论 -
STM32将常量数组定义到FLASH固定地址
方法:static const uint8_t s_acBmpLogo030[len] __attribute__((at(0X800F000)))={0x80,0xC0,0xC0,0xC0,0xC0,0x80,xxxxxxx}编译之后可在.map文件看到其分配到的地址 0x0800f0000x0000005cDataRO4013.ARM.__A...转载 2019-04-29 01:00:48 · 3960 阅读 · 0 评论 -
STM32 下载程序时,往flash固定位置写数据配置
1.就像参数定义时使用下面语句const unsigned char Flash_user_data[16] __attribute__((at(0X08080000))) ={0x01,0x02,0x03,0x04,0x01,0x01,0x03,0x03,0x04,0x04,0x04,0x04,...转载 2019-04-29 01:04:13 · 2154 阅读 · 0 评论 -
stm32启动指向0x1FFFF020
stm32启动的时候,一直跑不起来,然后进行debug, PC指针总是指向0x1FFFF020,这是boot脚设置错误,解决办法为:将boot0设置为0,boot1设置为任意!原创 2019-03-24 18:27:48 · 3079 阅读 · 0 评论 -
磁力计校正和数据处理
在飞控涉及到的几个传感器中磁力计因该是属于最简单的传感器。在飞控上一般使用的磁力计传感器芯片是HMC5883L、HMC5983、MPU9250、MAG3110等。这些芯片利用的物理原理都相同,只是在精度和数据接口上有些区别。下面简单说说磁力计的原理。我们的地球都是有磁场存在的,地理的南极是地磁的北极,在地球的每一个区域都是受地磁影响的,可以说地磁无处不在。而且地磁的方向都是一定的,除了在南北极地...转载 2018-12-17 09:44:41 · 2649 阅读 · 3 评论 -
Mtk Android编译命令
一、输入命令:cbk@YCS:~/work/k6/alps$ ./mk help Usage: (makeMtk|mk) [options] project actions [modules]Options: -t, -tee : Print log information on the standard-out. -o, -opt=bypass_argument_to_make ...转载 2018-03-19 15:06:33 · 267 阅读 · 0 评论 -
..\SYSTEM\usart\usart.c(41): error: #260-D: explicit type is missing ("int" assumed)
compiling usart.c.....\SYSTEM\usart\usart.c(41): error: #260-D: explicit type is missing ("int" assumed) _sys_exit(int x) ..\SYSTEM\usart\usart.c: 0 warnings, 1 error分析: #if 1#pragma import(__...原创 2018-03-23 17:53:52 · 6444 阅读 · 0 评论 -
嵌入式开发中logout两种实现方式与原理
1)如果没有logout头文件,利用#include <stdio.h>库中的printf函数实现 so文件需添加 #include <stdio.h> 然后定义logout函数如下: #ifndef __LogOut__ #define LogOut(format,...) printf(format, ##__VA_ARGS__) #endif pr...转载 2018-07-02 21:13:19 · 590 阅读 · 0 评论 -
STM32高级开发(12)-在GCC中使用printf打印串口数据
在大家使用keil或是iar开发stm32等arm芯片的时候,想来最不陌生的就是使用print通过串口输出一些数据,用来调试或是其他作用。但是要明确的是由于keil iar gcc 他们使用的标准C语言库虽然都遵循一个标准,但他们底层的函数实现方式都是不同的,那么在GCC中我们能否像在keil中一样重映射print的输出流到串口上呢?答案是肯定的。keil中的重映射...转载 2018-07-10 09:52:07 · 1641 阅读 · 0 评论 -
STM32F4 ADC采集数据的DMA数据传输【库函数操作】
书接上文,开始折腾ADC的DMA传输。因为大家都在说DMA,就连ST的例子里边也是使用DMA的。 ADC采集到的数据都存储在一个固定的寄存器中。当常规采样方式采样多个通道时候,使用DMA可以较好地避免将采集到的数据丢失。当ADC的DMA功能被使能的时候,每个通道转换完毕时都会发出一个DMA请求。DMA方式也不能完全避免数据丢失问题,要实现数据不丢失需要在DMA的同时开启OVERR...转载 2018-07-24 09:58:08 · 3206 阅读 · 0 评论 -
串口状态机,这东西很好用啊
以前并没有发现串口状态机的好处,以至于忘记了到底怎么用到底是干什么的,最近用到了这种指定格式的数据包解析,才发现这东西非常的好用,可以增加数据传输的鲁棒性,可以对串口的数据包进行过滤只解出符合协议的数据包。这个呢其实就是一种思想,不仅仅局限于串口之间的数据传输,我认为可以用在很多指定数据协议的数据包传输解析当中。大致代码思想写在下面,希望对大家有帮助。/* 主要的变量声明在这边/* ...转载 2018-07-25 20:40:11 · 1104 阅读 · 0 评论 -
用C++开发STM32程序
今天这篇文章有点复杂,大家要注意一点看啦!我们知道KEIL是支持C++的,网上一搜索也能找到一些使用C++的方法,无非是在Keil里的options->C/C++->Misc Controls里添加—cpp,如果要支持c++11,还需要指定—cpp11。事实上这样的C++并不是完整意义的上的C++,本人测试过,有好多C++的新功能都是没有办法实现的。这里需要注明的是,在KEIL5....转载 2018-10-09 10:38:41 · 6672 阅读 · 0 评论 -
STM32L1学习笔记05 串口校验位与数据位的一个坑
引言今天被一个坑给坑了,难以平静,记录下。ST的HAL库串口结构体 UART_InitTypeDef 的 WordLength 不单单是指数据位!ST的HAL库串口结构体 UART_InitTypeDef 的 WordLength 不单单是指数据位!ST的HAL库串口结构体 UART_InitTypeDef 的 WordLength 不单单是指数据位!气人的话说三遍!如果你有用...转载 2018-12-19 18:45:30 · 1562 阅读 · 2 评论 -
STM32 中JTAG 引脚作为普通IO口设置方法
stm32的程序下载引脚涉及PB3、PB4、PA13、PA14、PA15,其中PA13,PA14分别作为SWD调试的SWIO和SWCLK。PB3,PB4,PA13,PA14,PA15共同用于JTAG调试。 看上面的数据手册,可以知道一般的IO口,其默认功能就是IO口。可是PB3、PB4、PA13、PA14、PA15这几个IO口的默认功能是JTAG功能,IO口功能反...转载 2019-06-17 11:21:40 · 3926 阅读 · 0 评论 -
STM32串口中断接收一个完整的数据帧
代码运行条件:(1) 大端发送;(2) 上位机发送一帧数据的时间间隔不能大于主循环周期;(3)数据帧满足下面格式: 帧头部(Head)类型(Type)长度(Length)值(Value)CRC校验2字节1字节1字节X字节2字节转载 2017-08-19 16:41:12 · 11956 阅读 · 4 评论