![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32
文章平均质量分 87
Bingo Fang
不积跬步无以至千里,不积小流无以至江河。
展开
-
stm32与HC-SR04超声波传感器测距
首先,先来看一下这个模块的基本功能和原理。HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。像智能小车的测距以及转向,或是一些项目中,常常会用到。智能小车测距可以及时发现前方的障碍物,使智能小车可以及时转向,避开障碍物。注意是5v输入,但是我用stm32 的3.3v输入也是没有问题的。转载 2017-12-21 14:38:14 · 7290 阅读 · 8 评论 -
关于STM32外接12MHz晶振的处理办法
关于STM32外接12MHz晶振的处理办法http://www.amobbs.com/thread-4478412-1-1.html(出处: amoBBS 阿莫电子论坛)由于STM32F10x库官方采用的是默认的外接8MHz晶振,因此造成很多用户也采用了8MHz的晶振,但是,8MHz的晶振不是必须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行。 在论坛上看到很多用户反映,使用外接转载 2018-01-18 21:59:56 · 2731 阅读 · 0 评论 -
牛人对STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解
STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下/* Preemption Priority Group ----------------------------转载 2018-01-18 22:07:15 · 577 阅读 · 0 评论 -
窗口看门狗
一,窗口看门狗介绍独立看门狗的喂狗范围 0-X(X由预分频器和重装载值决定,最大值为0xFFF)独立看门狗相关介绍:传送门:独立看门狗相比于独立看门狗,窗口看门狗限定了喂狗时间段(由喂狗上限和喂狗下限值限定的喂狗范围) 所以形象的称作窗口看门狗二,为什么需要窗口看门狗独立看门狗:在0-重载值之间任意时间都可以喂狗 如果程序跑飞后又跑回正常转载 2018-01-20 20:21:57 · 990 阅读 · 0 评论 -
stm32串口占用时间、消耗CPU及最大中断时间的深度分析
1、stm32串口发送占用的时间 答:做嵌入式以来,一直自认为在两个MCU之间的串口通信很占用时间,让我感觉很是不爽。经过一番查找资料后发现并没有我想象的那么糟糕。串口发送数据: 发送数据在软件层面来看是按照字节来发送的。USARTx->DR = (Data & (uint16_t)0x01FF);CPU只需要把一个字节的数据填充到DR寄存器中就可以了,然后具体的发送过程是由...转载 2018-03-03 10:00:29 · 7470 阅读 · 2 评论 -
stm32的三种编程下载方式
J-link几乎可以调试所有的arm芯片,不得不说是个好东东。这里记录三种stm32的下载程序方式:1.J-Flash下载(需要用到J-link)2.MDK配置下载(需要用到J-link)3.ISP下载(串口下载,需要用到官配串口下载软件,用过stc51的对这个都不会陌生吧)--------------------------------------------------------------...转载 2018-02-25 10:57:52 · 1137 阅读 · 0 评论 -
模拟SPI发送数据位值写法细节
在SPI发送一个字节内容的函数中如下:#define Max7219_DIN PAout(6)void Write_Max7219_byte(u8 DATA) { u8 i; Max7219_CS=0; for(i = 8;i >= 1;i--) { Max7219_CLK=0;/*①*/ // ...原创 2017-10-23 22:44:20 · 1813 阅读 · 0 评论 -
哈佛和冯诺依曼,从STM32的const全局变量说起
文章出处。 http://blog.csdn.net/qq_29344757/article/details/75730054 从在学校到后来的实习工作,讲真,对于处理器的冯诺依曼结构和哈佛结构不大在意,印象中只知道它是数据存储器和程序存储器相关。 昨天在STM32程序中,把全局变量的定义成const属性时,发现它所处的位置是在STM32内置的FLASH而非内置的SRAM中。顿时让我觉得十分奇...转载 2018-03-22 10:48:23 · 742 阅读 · 0 评论 -
使用MDK的Bubug仿真,程序执行时间与代码设定时钟一致性问题
大家在调试程序时,有时要查看某段程序的执行时间,有些人可能会发现怎么程序执行的时间和我预想的相差很多,无法真实的还原程序设计的执行时间。如果使用ST-LINK来仿真的同学可以通过设置Options for target -> Bebug ->Settings->Trace中的Core处来设定自己程序中设定的时钟频率。这里我的程序设定的时钟频率为72MHZ,故此处设置如下:...原创 2018-04-30 15:51:00 · 3368 阅读 · 0 评论 -
STM32 简单多任务调度
STM32的开发目前大多数还开处于“裸奔”的阶段,处于开发成本的考虑,可能还未嵌入任何的RTOS系统,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理,在main函数中你可能会写成如下方式:int main(void){ while (1) { Task1(); // 调用任务1 Task2();转载 2018-01-18 22:03:05 · 1056 阅读 · 1 评论 -
ANSIC几种特殊的标准定义(__FILE__、__LINE__、__STDC__···)
相关标题:__FILE__、__LINE__、__DATE__、__TIME__、__STDC__为方便大家阅读,本文内容已经整理成PDF文件:http://pan.baidu.com/s/1gfHygynⅠ、写在前面对于我们大部分使用单片机进行裸机开发的朋友来说,可能很少有人在程序中许多关键的地方打印一些关键信息。有较大系统开发,或复杂系统开发经验的朋友一般都会在程序中输出很多调试信息,如在UC转载 2018-01-24 10:30:38 · 324 阅读 · 0 评论 -
STM32使用外部16MHZ晶振总结
做小封装产品设计的朋友或许知道3225-4PIN的晶振,为何8MHZ晶振批量价格要到2元一片,而16MHZ晶振只需要0.4元甚至更少。究其原因是因为3225封装的晶振目前全球最低频率一般为8MHZ,而国内8MHZ达不到精度指标,所以市场上的8MHZ晶振一般为进口晶振,因此成本被垄断。 图1 3225封装晶振 STM32单片机学习者一开始用的晶振一般是2PIN的8MHZ晶振,一旦正真做产转载 2018-01-18 21:58:17 · 1093 阅读 · 0 评论 -
STM32的几种延时方法(基于MDK固件库3.0,晶振8M)
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ms( )。1.普通延时法这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。//粗延时函数,微秒void delay_us(u16 time){ u16 i=0转载 2018-01-24 15:08:56 · 4416 阅读 · 0 评论 -
一个关于STM32内部USART的波特率配置话题
某日,一工程师咨询在使用STM32F407 MCU开发产品时用到UART5和USART6做串行异步通信,将二者波特率配置为1200bps时,发现UART5正常,而USART6工作不正常。咋听起来的确有点奇怪。怀疑其相关配置有问题,查看代码并无异常,而且当波特率调高时,二者都表现正常。这基本断定代码配置没有逻辑或流程上的错误。 结合技术手册来看,UART5与USART6的差别主要体现转载 2017-12-24 10:09:00 · 4287 阅读 · 1 评论 -
stm32的超频实验
从时钟树中可以看出外接晶振可以接4-16Mhz,经过PLL倍频,最高可以达到16倍晶振的频率。笔者自己是外接的8Mhz晶振,所以说理论上可以达到8*16=128Mhz的频率。 所用芯片:stm32f103 编译工具:keil5 时钟配置子函数如下:void HSE_Init(uint32_t RCC_PLLMul_x)//范围2-16{ ErrorStatus HSEStat转载 2017-12-31 15:37:35 · 3255 阅读 · 0 评论 -
stm32 RTC时钟配置
stm32——RTC实时时钟一、关于时间 2038年问题 在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时间的程序都将将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。 在大部份的32位操作转载 2017-12-11 11:27:25 · 1715 阅读 · 0 评论 -
STM32 IO口的8中配置方式解读(推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟)
STM32 IO口的8中配置方式:(1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_M转载 2017-11-24 21:08:56 · 3563 阅读 · 0 评论 -
STM32串口发送数据第一个字节丢失问题
STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。转载 2017-11-23 17:48:15 · 6964 阅读 · 2 评论 -
STM32的USART讲解
一,串口相关寄存器USART_SR 状态寄存器USART_DR 数据寄存器USART_BRR 波特率寄存器USART_CR1 控制寄存器USART_SR-状态寄存器: 状态寄存器USART_SR,描述串口寄存器的一些状态: 如位5:读数据寄存器非空 通过读取这个位的值,判断是否收到了完整的数据 串口已经接收到了数据,并且已经转载 2017-11-21 21:05:05 · 19033 阅读 · 1 评论 -
STM32 大小端模式 与 堆栈及其增长方向分析
栈增长和大端/小端问题是和CPU相关的两个问题.1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在”栈”里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000800表示栈大小是0X800,也就是2048转载 2017-11-03 13:12:42 · 378 阅读 · 0 评论 -
keil编译后code,RO-data,RW-data,ZI-data含义及mcu的flash实际存储数据
keil编译后会有一行:Program Size:Code=xxxRO-data=xxx RW-data=xxx ZI-data=xxxCode 代表执行的代码,程序中所有的函数都位于此处。RO-data 代表只读数据,程序中所定义的全局常量数据和字符串都位于此处。RW-data 代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。ZI-data 代表未初始化的读写数据,程转载 2018-01-11 11:57:26 · 566 阅读 · 0 评论 -
第一个函数SystemInit()里面有些啥
SystemInit()这个函数出现在main()函数的第一行,可以看出它的重要性。以前关于SystemInit()这个函数从来没有关心过,只知道这是进行STM32系统初始化的一个函数。今天决定仔细看看,重新开始STM32的学习。这个函数在system_stm32f10x.c中,此C文件主要就是干具体硬件配置相关的工作。[cpp] view plain copy print?/** @ad转载 2018-01-12 12:55:25 · 455 阅读 · 0 评论 -
STM32 USART 串口 DMA 接收和发送的源码详解!
一直都没有机会用STM32做什么项目,好在公司产品要平台升级,用到了STM32,所以最近在调试STM32,先说USART,后面再来说I2C 等等 硬件平台:STM32F103ZET6; 开发环境:KEIL 4; 先说说应用通讯模式,串口终端的工作方式和迪文屏差不多,终端被动接受MCU发的指令,终端会偶尔主动发送一些数据给MCU(像迪文屏的触摸信息上传)。 串口DMA发送: 发送数据的流转载 2018-01-12 13:01:48 · 776 阅读 · 0 评论 -
STM32 输入捕获的脉冲宽度及频率计算
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。以下是对脉冲宽度及频率的计算。1、脉冲宽度如下图所示,采集该高电平脉冲的宽度,只需要进入输入捕获上升沿检测,记录当前的发生上升沿时的CNT值,再进行输入捕获下降沿检测,也记录当前发生下降沿时的CNT值,两次CNT值的差值再根据计数的频率就可以算出脉冲的宽度。原创 2018-01-23 20:22:43 · 12377 阅读 · 9 评论 -
基于stm32串口环形缓冲队列处理机制—入门级(单字节)
串口环形缓冲区实验1.1 实验简介 最简单的串口数据处理机制是数据接收并原样回发的机制是:成功接收到一个数,触发进入中断,在中断函数中将数据读取出来,然后立即。这一种数据处理机制是“非缓冲中断方式”,虽然这种数据处理方式不消耗时间,但是这种数据处理方式严重的缺点是:数据无缓冲区,如果先前接收的的数据如果尚未发送完成(处理完成),然后串口又接收到新的数据,新接收的数据就会把尚未处理的数据覆盖,从而...转载 2018-07-07 21:00:38 · 1516 阅读 · 1 评论