stm32

好用的Bin文件查看器,J-flash

时光怂恿深爱的人放手 提交于 2019-12-19 09:20:21
工作中,很多地方用到Bin文件,如编译完成后的固件和从MCU的Flash读出来的文件,这时候一个好的Bin文件查看器至关重要。经常我们用STM32自带的STM32 ST-LINK Utility可以直接查看,但是一行只能显示16个字节,为了显示更多的字节,我推荐用SEGGER的J-Flash,相信很多人对这个都不陌生,下面是下载路径和使用步骤。 不过STM32 ST-LINK Utility有一个好用的功能,就是支持查找,这个功能J-flash我还没有发现有。 下载路径: https://www.segger.com/products/debug-probes/j-link/tools/j-flash/about-j-flash/ 使用步骤: 1.安装完J-flash; 2.调过创建project步骤; 3.直接点击菜单栏-File-选定要打开的Bin文件; 4.选择字节长度组合是x1,x2,x4。 5.完成 来源: CSDN 作者: Len1900 链接: https://blog.csdn.net/u013489804/article/details/103608063

STM32重启之选项字节

谁说胖子不能爱 提交于 2019-12-19 08:44:07
STM32重启之选项字节 最近用STMCubeMX生成hal库工程,程序在仿真的时候不断重启,一度怀疑是hal库生成的工程有问题,可是同样的程序在另一块板子上却不会出现重启的情况,到这里基本就可以定位是硬件问题了,但是我左看右看也看不出硬件哪里出了问题;本来想放弃,想想这个问题不搞明白,后患无穷; 采用的是仿真的手段,看看是何原因导致的重启: 程序中加入对RCC_CSR寄存器清零的代码,以便在程序最开始的地方打断点,看看是什么导致了重启: RCC->CSR |= 1<<24; 从上面可以看出,是独立看门狗和硬件复位引脚复位导致的重启; 可是我没有开看门狗啊!!! 用万用表交流档测量MCU复位引脚,还真有电平跳动,看来真的是看门狗被触发了; 查看stm32的用户手册,翻到看门狗章节: 我去,又是 选项字节 。。 之前就遇到过stm32读保护的问题,折腾了好久发现是选项字节启用了读保护,于是,用ST-LINK Utility工具打开选项字节: 然后,勾选上再点击Apply,重启问题果然解决,也不知道是怎么触发这个设置的,有网友说是盗版jlink会导致这个问题,也不知道是不是,时间有限,就不再深究了; 来源: CSDN 作者: 贝萝岗的小蚂蚁 链接: https://blog.csdn.net/qq_18628523/article/details/103594592

STM32 DMA传输笔记(HAL库版)

拟墨画扇 提交于 2019-12-19 07:26:56
DMA,全称为:Direct Memory Access,即直接存储器访问。 DMA传输方式无需CPU 直接控制传输 ,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM 与I/O设备开辟一条直接传送数据的通路,能使CPU 的效率大为提高。 一、DMA请求映像   STM32F10x有两个DMA控制器,使用DMA控制器可使数据从存储器到存储器、存储器到外设、外设到存储器。每个控制器有若干通道,参考《STM32参考手册》,各通道请求一览如下图: 二、DMA初始化    1、使能DMA时钟 __HAL_RCC_DMA1_CLK_ENABLE(); //DMA1时钟使能    2、关联DMA与UART1 DMA_HandleTypeDef UART1TxDMA_Handler; //DMA句柄 __HAL_LINKDMA(&UART1_Handler,hdmatx,UART1TxDMA_Handler); //将DMA与USART1联系起来(发送DMA)    3、配置DMA句柄 //Tx DMA配置 UART1TxDMA_Handler.Instance=chx; //通道选择 通道4指的是UART1Tx UART1TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH; //存储器到外设 /*由于是从存储器读数据给外设

stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)

≯℡__Kan透↙ 提交于 2019-12-19 02:18:20
  STM32的I/O口可以由软件配置成如下8种模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能及开漏复用功能。每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CRL和CRH(模式、速度);数据寄存器IDR和ODR;置位/复位寄存器BSRR;复位寄存器BRR;锁存寄存器LCKR。 I/O口模式: GPIO的8种模式 通用输出 推挽输出(Push-Pull) 可以输出高、低电平,连接数字器件 开漏输出(Open-Drain) 开漏引脚不连接外部的上拉电阻时,只能输出低电平;如果需要同时具备输出高电平的功能,则需要接上拉电阻 复用功能输出 复用功能推挽输出 片内外设功能(I2C的SCL,SDA) GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用) 复用功能开漏输出 片内外设功能(TX1,MOSI,MISO,SCK,SS) 输入 模拟输入 应用ADC模拟输入,或者低功耗下省电 浮空输入 可以做KEY识别,外部按键输入 IO的电平状态是不确定,完全由外部输入决定 下拉输入 IO内部下拉电阻输入 不确定信号->低电平 上拉输入 IO内部上拉电阻输入 不确定信号->高电平    1.GPIO口配置步骤 ①使能PORTx(x=A~G)   APB2外设时钟使能寄存器(RCC_APB2ENR) 置1开启。清0关闭。 8-2位使能GPIO G-A

【STM32学习】(13)STM32实现超声波测距(HC-SR04)

非 Y 不嫁゛ 提交于 2019-12-18 22:10:27
经过反复的研究和调试,终于搞好了,所以说,只要静下心,肯于研究,问题就会显得没那么复杂。 博文写之前,先要分析一下硬件的基本构造和样式以及它的工作原理: 样式如图: 工作原理(很重要): 说明一下工作过程: 单片机型号:STM32F103VET 1.提供一个10us以上的脉冲 2.模块会自动发出8个40KHz周期电平,并检测回波 3.等待输出回响信号, 要注意这个电平是自动产生的,测试距离远,这个脉宽就宽,与检测距离成正比 。 实现步骤: 1. 用按键来调用测距功能 ,后期可以修改成自动循环测距,但循环测距的周期要在60ms以上,不然会有干扰 按键接在 PC0 口 2. 打开串口1(USART1) ,为了在电脑上用串口调试助手看测试的距离值。 3. 打开定时器TIM3 ,这里设置了 5us 中断一次,读者也可以用其它定时器完成 4. 开外部中断1,映射到PA1口外部中断 这样就差不多了 接线: 按键接在PC0 超声波测距模块,trig接在PA0 超声波测距模块,Echo接在PA1 超声波测距模块,VCC接在5V上 下面看代码,因为代码分的文件比较多。只贴出核心代码: 核心代码如下: 来源: CSDN 作者: xiaocaidayong 链接: https://blog.csdn.net/XiaoCaiDaYong/article/details/103605070

STM32驱动MPU6050

ε祈祈猫儿з 提交于 2019-12-18 18:32:26
MPU-60X0 是全球首例 9 轴运动处理传感器。 它集成了 3 轴 MEMS 陀螺仪, 3 轴 MEMS 加速度计,以及一个可扩展的数字运动处理器 DMP ( Digital Motion Processor ) ,可用 I2C 接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其 I2C 或 SPI 接口 输出一个 9 轴的信号 ( SPI 接口仅在 MPU-6000 可用) 。 MPU-60X0 也可以通过其 I2C 接口 连接非惯性的数字传感器,比如压力传感器。 MPU-60X0 对陀螺仪和加速度计分别用了三个 16 位的 ADC ,将其测量的模拟量转化 为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的, 陀螺仪可测范围为± 250 ,± 500 ,± 1000 ,± 2000 ° / 秒( dps ) ,加速度计可测范围为± 2 ,± 4 ,± 8 ,± 16g 对 MPU6050 的配置主要需要 1. 上电检测芯片序列号 , 自检 2. 设定加速度陀螺仪的阈值和检测频率 3. 设定外部链接设备的驱动模式以及地址 4. 设定中断模式 , 比如要打开自由落体中断需要的设置 , 数据准备好中断需要的设置等 5. 设定电源管理模式 , 防止进入休眠 6. 循环读取数据 MPU 输出一共三种数据 , 包括陀螺仪输出

STM32 开发板资源梳理

旧街凉风 提交于 2019-12-18 17:02:52
目录 片内资源 FLASH RAM 时钟与总线 中断 其他 板载资源 片内资源 开发板使用的STM32F407ZGT6在手册里是这样的: 片内FLASH:1M,片内RAM:192K,这两个跟程序运行和下载密切相关。 FLASH 地址分配如图,因此FLASH下载地址从 0x8000 0000 开始,大小为 0x0010 0000 (1M) RAM RAM的两段需要注意的是只有 0x20000000 开始的112K+16K是可以让外设访问的,而 0x10000000 开始的64K不可被外设访问 时钟与总线 系统时钟 SYS_CLK 有3个来源,HSI(内部16M,可用作PLL),HSE(外部高速,晶振产生),PLL(主PLL由HSE或HSI提供,输出两路,第一个输出高速系统时钟168M,第二路生成USBOTG 48M、RNG<=48M、SDIO时钟<=48M,专用PLL用于I2S),配置方面可以参考cubeMX来设置 总线的概念一直不太清楚,这里总线部分引用自网络: 总线来自于ARM公司的AMBA标准,是ARM公司提出的一种开放性的SoC总线标准,现在已经广泛的应用于RISC的内核上,它定义了两种总线: AHB(Advanced High-performance Bus)先进的高性能总线,也叫做ASB(Advanced System Bus)。APB(Advanced

Processor Instruction Cycle Execution Time

佐手、 提交于 2019-12-18 16:55:56
问题 My guess is that the __no_operation() intrinsic (ARM) instruction should take 1/(168 MHz) to execute, provided that each NOP executes in one clock cycle, which I would like to verify via documentation. Is there a standard location for information regarding the instruction cycle execution time for a processor? I am trying to determine how long an STM32f407IGh6 processor should take to execute a NOP instruction running at 168 MHz. Some processors require multiple oscillations per instruction

Disable IRQ on STM32

偶尔善良 提交于 2019-12-18 09:28:52
问题 Is there any way to disable all irq from Cortex M3 MCU except one ? My issue is that I have a system running several kinds of irq with various priority levels and I want to disable all irq except one in a particular state. I know I can disable all irq by using "__disable_irq()" instruction but I can't enable one irq after calling this instruction if I didn't call "__enable_irq()" before. Thanks for your help, Regards 回答1: Use the BASEPRI register to disable all interrupts below the specified

[STM32]基于MQ135+STM32的环境空气质量检测

会有一股神秘感。 提交于 2019-12-18 08:25:58
[STM32]基于MQ135+STM32的环境空气质量检测* MQ135+STM32源代码下载 使用模块: STM32F103C8T6 MQ135空气质量传感器模块 OLED液晶IIC接口 MQ135使用说明: 1.DOUT输出数字信号,TTL 输出有效信号为低电平(输出低电平时信号灯亮) 2.AOUT输出模拟型号,模拟量输出随浓度增加而增加,浓度越高电压越高 实验原理: 本文使用AOUT作为模拟信号输出引脚,直接将AOUT脚接STM32的AD转换的输入脚,ADC将采集到的模拟信号转换为数字信号。在正常环境中,即:没有被测气体的环境,设定传感器输出电压值为参考电压,这时,AOUT端的电压在1V左右,当传感器检测到被测气体时,电压每升高0.1v,实际被测气体的浓度增加20ppm(简单的说:1ppm=1mg/kg=1mg/l=1×10-6 常用来表示气体浓度,或者溶液浓度。),根据这个参数就可以在单片机里面将测得的模拟量电压值转换为浓度值。 特别提醒:传感器通电后,需要预热20s左右,测量的数据才稳定,传感器发热属于正常现象,因为内部有电热丝,如果烫手就不正常了。输出浓度和电压关系的比值并非线性,而是趋于线性,所以测量值存在误差。 本实验代码是基于正点原子的ADC实验修改的。 MQ135 adc代码如下: #include "adc.h" #include "delay.h" ////