
STM32
文章平均质量分 64
恋天的风
这个作者很懒,什么都没留下…
展开
-
STM32中的断言
#ifdef USE_FULL_ASSERT/** * @brief The assert_param macro is used for function's parameters check. * @param expr: If expr is false, it calls assert_failed function which reports * ...转载 2019-03-08 18:31:49 · 423 阅读 · 0 评论 -
【蓝桥杯单片机07】彻底理解51单片机的中断系统
【蓝桥杯单片机07】彻底理解51单片机的中断系统广东职业技术学院 欧浩源 在接下来的教程中,将会介绍定时器、串口通信等外设的基本使用,而这些外设的使用都要涉及中断,而且中断是单片机或嵌入式开发中一个相当重要的概念。不能掌握中断系统,就无法灵活应用这些外设。1、什么是中断? 你正在追电视剧《神雕侠侣》,正看得入迷的时候,电话响了,你暂停电视剧,去接电话,在接电话的过程中,门铃又...转载 2019-03-07 17:53:40 · 556 阅读 · 0 评论 -
STM32定时器中IC,OC
IC是输入捕捉,对于管脚来说是输入,可以设定为上升沿捕捉、下降沿捕捉、跳变沿捕捉(上升沿、下降沿都捕捉)。通常我们用这个来计算输入脉冲的周期和占空比。以计算脉冲的周期为例,先设定定时器的时钟,然后设定上升沿捕捉,并设定捕捉中断。当脉冲上升沿到来时,进入中断,在中断中读取当前定时器时钟的读数,减去上一次定时器的读数,即为脉冲的周期。OC是输出比较,对于管脚来说是输出。可以设定为到计数输出高电平或者...原创 2019-03-01 23:31:47 · 4086 阅读 · 1 评论 -
KEIL调试警告与报错
1. warning: #223-D: function "printf" declared implicitly改正方法:添加#include "stdio.h "原创 2019-02-18 09:59:11 · 2287 阅读 · 0 评论 -
C语言:定义字符串的几种方式
char a[5]="hello";第2种:char a[]="hello";第3种:char* a="hello";第4种:char a[10];gets(a);第5种:char* a[5]={"hello","nihao","good","ok","bye"};转载 2019-02-15 17:26:19 · 19676 阅读 · 0 评论 -
什么时候需要用到RCC_APB2Periph_AFIO--复用IO时钟的使用
需要用到外设的重映射功能时才需要使能AFIO的时钟 外部中断(EXTI)中与AFIO有关的寄存器是AFIO-EXTICR1、2、3,它们是用来选择EXTIx外部中断的输入脚之用。 举例:重映射USART2 USART2的TX/RX在PA.2/3 PA.2已经被Timer2的channel3使用需要把USART2的TX/RX重映射到PD.5/6库函数的调用...转载 2019-01-23 15:24:46 · 742 阅读 · 0 评论 -
MDK编译出现*** Error: CreateProcess failed,的解决方法
编译其他人已经编写好的工程代码时,编译出现了如下的问题。 解决方法:将勾选的RUN #1去掉勾选点击ok就可以了。转载 2019-01-21 15:12:32 · 3293 阅读 · 1 评论 -
由于MDK5.0A没有STM32F103程序错误 stm32f10x.h(298): error: #67: expected a "}"
由于MDK5.0A没有STM32F103程序错误 stm32f10x.h(298): error: #67: expected a "}"转自:http://blog.163.com/lby147612@126/blog/static/17041045220150130438428/由于MDK4.72A没有STM32F030,所以升级到了MDK5.0我的程序在MDK4.72A下编译正常没...转载 2019-01-21 14:31:54 · 2187 阅读 · 0 评论 -
keil里中断服务函数设置标志位时加volatile
在中断服务函数中,如果设置标志位,然后其他函数判断标志位,需要设置全局变量来实现。全局变量的声明中需要添加修饰符volatile,防止编译器对变量进行优化,导致程序出错。 下面是volatile的用法说明:volatile用于防止相关变量被优化。 例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬件操作,但是如果不加volatile,编译器会把这些寄存...转载 2019-01-14 20:27:03 · 1409 阅读 · 0 评论 -
STM32F10XX中SPI的DMA发送数据
参考资料:http://blog.youkuaiyun.com/jdh99/article/details/7603029http://www.openedv.com/posts/list/3159.htm 上面提到的两篇博文比较详细深刻的说明了DMA的工作方式以及SPI的DMA传输方式的特点。结合对Stm32F103VET6中SPI的DMA传输方式的配置和学习谈谈感受,在看下面的内容之前请...转载 2019-01-09 23:26:28 · 8650 阅读 · 1 评论 -
STM32F0中断优先级
STM32F0中断优先级配置:void NVIC_Config(void){ NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel2_3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; ...原创 2019-01-08 17:08:00 · 5536 阅读 · 0 评论 -
STM32之SPI从机DMA例程
#include "stm32f10x.h"/* RCC时钟配置 */void RCC_config(void){ ErrorStatus HSEStartUpStatus;/* RCC寄存器设置为默认配置 */RCC_DeInit();/* 打开外部高速时钟 */RCC_HSEConfig(RCC_HSE_ON);/* 等待外部高速时钟稳定 */HSEStartUpS...转载 2019-01-03 22:31:42 · 6023 阅读 · 0 评论 -
一个免锁环形缓冲区的实现
面是串口DMA+环形缓冲区的实现,数据收发是异步的,不需要死等。关于环形缓冲区参考:12http://blog.youkuaiyun.com/jieffantfyan/article/details/53572103实现原理程序是在串口中断收发方式的基础上设计的,应用层通过环形缓冲区进行串口数据读取,环形缓冲区作为一级缓存,增加DMA作为二级缓存。相对中断方式这种设计可以减少串口进入中断的次数,...转载 2019-01-03 11:28:29 · 621 阅读 · 0 评论 -
单片机MCU内存分配
谈到内存,我们都会想到PC,对于单片机或者arm来说也是存在内存的,简单的理解是:内存嘛……就是存放东西的地方,只不过这个东西是数据而已,好了,还是把重点放在mcu上面,对于一款mcu来说,在性能描述的时候都会告诉sram,flash的容量大小,对于初学者来说,也不会去考虑和理会这些东西,拿到东西就只用。其实不然,这些量都是十分重要的,仔细想想,代码为什么可以运行,代码量是多少,定义的int、sh...转载 2019-01-02 20:45:05 · 516 阅读 · 0 评论 -
STM32 DMA 应用之(一)SRAM 与flash 间数据传输
一、为什么要用DMA?DMA 全称:Direct MemoryAccess 就是可以直接内存存取;正是它可以直接操作内存所以具备以下优点:而无需经过CPU去操作内存的存取,这样可以解放CPU出来干其他的事情;因为他可以进行存储器时间的数据传输,而不需经过cpu,所以大大加快了数据传输速度—是一种高速的数据传输; 二.DMA有几种传输数据方式:(1)内存到 内存之间的;...转载 2018-12-27 20:54:15 · 2912 阅读 · 0 评论 -
STM32 DMA正常模式等待传输完成和开始下一次传输
选择DMA的正常模式,即DMA只传输一次。如果当传输完一次后,还想再传输一次,就需要重启DMA:DMA_Cmd(DMA1_Channel6,DISABLE); 重新设置源地址 重新设置目的地址 重设传输数量 DMA_Cmd(DMA1_Channel6,ENABLE); 因此建议把DMA_InitStructure定义为全局变量,然后可以使用下面语句来重启DMA:DMA_Cmd ...转载 2018-12-27 20:22:28 · 8317 阅读 · 0 评论 -
SPI DMA的使用
一是想总结一下SPI总线的特点与注意点,二是总结一下SPI DMA的使用一、SPI信号线说明 通常SPI通过4个引脚与外部器件相连:MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。 MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。 SCK:串口时钟,作为主设备的输出,从设备的输入 NSS:从设备选择。这是一...转载 2018-12-26 20:59:21 · 25354 阅读 · 4 评论 -
STM32:DMA方式接收SPI总线数据,并按照协议进行处理
一、前言为满足高速数据传输的要求,采用SPI总线。MCU端(STM32F072 Cortex-M0)接收CPU发送的SPI数据(数据18个字节为一包,起始包为0xAA,最后一包为CheckSum校验),接收完成后,将校验正确的数据分配给RF发送给接收端。二、硬件电路如下图所示,SPI部分使用SPI2即PB12 PB13 PB14 PB15三、程序流程3.1 SPI初始化 SPI初始...转载 2018-12-26 20:44:08 · 4479 阅读 · 0 评论 -
STM32 USART 串口 DMA 接收和发送的源码详解!
STM32开发板PCB完整工程连接:http://www.cirmall.com/circuit/7 ... F%EF%BC%81#/details 硬件平台:STM32F103ZET6; 开发环境:KEIL 4;先说说应用通讯模式,串口终端的工作方式和迪文屏差不多,终端被动接受MCU发的指令,终端会偶尔主动发送一些数据给MCU(像迪文屏的触摸信息上传)。串口DMA发送:...转载 2018-12-26 20:42:46 · 2204 阅读 · 1 评论 -
一个跟STM32F0中断优先级有关的话题
本文作者:Miler Shao 某日某工程师跟我交流,他在使用STM32F031的芯片开发一款电子产品. MCU跟外界有个UART串口通讯,外界经常会不定期地传送一串固定数量的数据包过来。令他郁闷的是,在从外界接受数据时偶尔会出现数据丢失一个两个的,尤其波特率高的时候容易发生。 经过跟他深入沟通,了解到STM32F031跟外界有UART数据通信并开启了RXNE接收中断,还...原创 2018-12-25 15:41:48 · 2565 阅读 · 1 评论 -
stm32中的类型定义
STM32里的类型定义,见如下说明:/* Exported types ------------------------------------------------------------*/typedef signed long s32;typedef signed short s16;typedef signed char s8;typedef signed long const...原创 2018-12-11 13:46:09 · 1319 阅读 · 1 评论 -
累加和校验算法(CheckSum算法)
因为外界总会对电路存在或多或少的干扰,对于数字信号,很可能导致传输的数据出现千差万别。对于很多需要传输数据的场合,尤其是一些数据可能会影响一些硬件的动作(诸如嵌入式的一些设备、机器人等),错误的数据可能会带来一些隐性风险,想想都可怕。由于本人是嵌入式相关领域的,平时玩的都是单片机,当然单片机的性能千差万别,不过很多的性能都只能说是勉强够用,毕竟成本考虑。所以今天的校验说法,比较简单,但是有...转载 2018-12-10 20:24:13 · 8334 阅读 · 1 评论 -
STM32通用定时器配置
STM32通用定时器配置一、STM32通用定时器原理 STM32 系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:...转载 2018-12-07 20:50:19 · 1267 阅读 · 0 评论 -
Keil修改Stm32的工程名字
首先 选中工程中的 如图 点击这个文件 之后记事本打开 如下图 点击全部替换 即可。 查找内容为 之前的名字 替换为现在的名字原创 2018-11-29 21:00:54 · 3334 阅读 · 1 评论 -
C语言中数组的定义错误点修正
错误定义数组的方法:int buff[ ]=[1,2,3];其中错误的地方有两处:1.未定义数组的大小。该数组中有3个元素,因此应为buff[3]。2.数组元素是最外面是用大括号{ }括起来,因此应为{1,2,3}。正确的定义方式为int buff[3]={1,2,3}; ...原创 2018-11-02 20:35:26 · 3519 阅读 · 2 评论 -
C语言程序调试
把一个函数返回值为float类型的数,赋给一个整数的数组,一直调试有问题,将数组的类型改为float类型即可。原创 2018-09-06 16:27:14 · 2668 阅读 · 0 评论 -
【转载】移位实现的乘除法
移位实现的乘除法移位实现的乘除法比直接乘除的效率高很多。用移位实现乘除法运算 a=a*4; b=b/4; 可以改为: a=a<<2; b=b>>2; 说明: 除2 = 右移1位 乘2 = 左移1位 除4 = 右移2位 乘4 = 左移2位 除8 = 右移3位 乘8 = 左移3位 ... ... 通常如果...转载 2018-09-03 21:10:53 · 3001 阅读 · 0 评论 -
KEIL4 mdk破解
原创 2018-09-03 17:29:52 · 4631 阅读 · 0 评论 -
【转载】mdk 使用--C99标准的问题
mdk中设置c99的方法如下图所示,在红色框中加上--C99即可支持-C99标准。转载 2018-09-03 17:26:01 · 1734 阅读 · 0 评论 -
【转载】关于IAP与APP互相跳转的实现
最近一个项目用到了IAP功能,在21IC看到的这个文章很有帮助,分享一下关于IAP与APP互相跳转的实现 首先,在您动手做这个实验之前,先要弄清除咱俩的软硬件有什么不同:1. 我的CPU是STM32F103ZET6,里面有512K的FLASH,您的CPU如果是其它类型,也不要紧,只是在程序里面,地址上限可能不一样。但是,个人觉得,最好能用256K以下的FLASH。2. 我的外...转载 2018-08-15 00:30:53 · 2181 阅读 · 0 评论 -
【转载】STM32 IAP 在线升级详解
(扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP 再烧写APP应用程序要烧写2次增加工人劳动力基础上写了“STM32 IAP+APP ==>双剑合一”链接稍后发)一、在进入主题之前我们先了解一些必要的基础知识----stm32系列芯片的种类和型号: startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F10...转载 2018-08-15 00:26:34 · 14311 阅读 · 2 评论 -
【转载】FATFS函数之——f_open & f_read
FATFS函数之——f_open & f_read刚开始使用f_read和f_write时发现read/write老是出错,仔细查看源码发现,原来f_open文件时需要指定open 方式,这些个方式影响了后面的文件操作。f_open函数声明如下: FRESULT f_open ( FIL* fp, /* [OUT] Pointer to the file ...转载 2018-08-14 19:41:03 · 8509 阅读 · 1 评论 -
【转载】TM32学习笔记之fatfs文件系统接口函数使用
FatFS文件系统包含了文件ff.h :文件系统实现头文件,定义有文件系统所需的数据结构diskio.h :底层驱动头文件,就一些状态宏的定义和底层驱动函数的申明integer.h:仅实现数据类型重定义,增加系统的可移植性ffconf.h :文件系统配置ff.c :文件系统实现。diskio.c 底层驱动 FatFs 提供下面的函数API:f...转载 2018-08-14 18:00:50 · 445 阅读 · 0 评论 -
【转载】FatFS f_open()函数详解
f_open创建/打开一个用于访问文件的文件对象FRESULT f_open ( FIL* FileObject, /* 空白文件对象结构指针 */ const XCHAR* FileName, /* 文件名指针 */ BYTE ModeFlags /* 模式标志 */);参数FileObject将被创建的文件对象结构的指针。FileNa...转载 2018-08-14 17:52:57 · 17545 阅读 · 0 评论 -
【转】keil(arm)中配置c99方法 及 C99特性
配置方法:option->c/c++->misc controls:--c99附c99特性:在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化创建过程中继续发展壮大。《标准修正案一》在1994年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的...转载 2018-08-08 14:13:51 · 1973 阅读 · 0 评论