
stm32
宁静以致墨
慢下来,享受技术,找一个安静的位置
展开
-
STM32定时器输入捕获
5、STM32定时器输入捕获前言: STM32定时器输入捕获简介STM32的输入捕获可以用于捕获脉宽, 测量时间 . 例如超声波测距模块就是需要用输入捕获功能, 通过测量输入脉冲的高电平脉宽 , 从而计算出测量物体的距离 ;定时器PWM工作模式上篇博客讲过了, 上篇是输出PWM, 本篇是要输入, 即外面的信号送给单片机的引脚, 然后单片机测量出脉宽 ;注: 下面根据正点原子的标准库函数教程分析, 并用CubeMX完成配置以及HAL库函数编程在这里插入图片描述如图所示 : 以测量高电平脉宽为例,转载 2021-08-09 17:31:15 · 4847 阅读 · 0 评论 -
MPU学习笔记
Cortex-M4的寻址空间类型被地址映射规则(上图)和MPU程序划分成了不用的区域,这些区域有以下3大类型内存:一般(Normal)类、设备(Device)类、强有序(Strongly-Ordered)类小端 Little-Endian 模式,即字的最低位(LSB)位于低地址字节。MPU属于Cortex-M4内核的一个外设Cortex-M4还为用户提供了一系列“同步原语”指令,使得操作系统中的进程和线程可以使用这些“同步原语”来实现对内存的无打断访问(无锁编程?),从而实现有保障的“r原创 2020-12-31 10:41:55 · 955 阅读 · 0 评论 -
代码段和数据端
上面提到的 Program Size 包含以下几个部分:1)Code:代码段,存放程序的代码部分;2)RO-data:只读数据段,存放程序中定义的常量;3)RW-data:读写数据段,存放初始化为非 0 值的全局变量;4)ZI-data:0 数据段,存放未初始化的全局变量及初始化为 0 的变量;...原创 2020-06-17 18:16:32 · 354 阅读 · 0 评论 -
使用keil设置软复位变量不丢失的数据的区域
1、勾选如上区域,修改分散加载文件。2、编译生成,project.sct 分散加载文件,生成文件如下:生成最新的区域。3、设置变量unsigned char test_backup[8] __attribute__((section("NO_INIT"),zero_init)); test_backup[0] = test_backup[0] + 1...原创 2020-01-21 10:54:54 · 785 阅读 · 0 评论 -
STM32PWM波形的计算及设置
当SYSCLK等于72M,APB1等于36M APB2等于72M时,定时器的时钟为72M。注意图中这句话:如果APB1/APB2预分频器=1则频率不变,否则频率x2。如果此时,APB1分频2,则PCLK1的外部时钟为36M,此时的定时器时钟x2为72M;APB2分频1,则PCLK2的外部时钟为72M,此时的定时器时钟等于PCLK2时钟72M。二、定时器预分频当定时器时钟定下以后,需要设置定转载 2017-05-09 10:50:45 · 2994 阅读 · 0 评论 -
STM32的4中输出模式
1、普通推挽输出(GPIO_Mode_Out_PP): 使用场合:一般用在0V和3.3V的场合。线路经过两个P_MOS 和N_MOS 管,负责上拉和下拉电流。 使用方法:直接使用 输出电平:推挽输出的低电平是0V,高电平是3.3V。 2、普通开漏输出(GPIO_Mode_Out_OD): 使用场合:一般用在电平不匹配的场合,如需要输出5V的高电平。原创 2017-07-24 09:56:17 · 371 阅读 · 0 评论 -
关于I2S及音频小结
1. I2S的基本知识1.1 I2S简介I2S总线英文简称Inter-ICSound,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。I2S也是同步串行通信接口。 1.2 I2S的连接线及作用1) 串行时钟SCLK,也叫做时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SC原创 2017-12-06 11:23:10 · 14467 阅读 · 2 评论 -
error in inlude chain (amsis_armcc.h):
error in inlude chain (amsis_armcc.h): 出现这个错误编译不会有任何问题,产生的原因与源码存放的位置有关系,换个位置把中卫去掉就好了。原创 2017-05-13 14:01:36 · 2309 阅读 · 0 评论 -
STM32滴答时钟源的问题
#if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)24000000U) /*!#endif /* HSE_VALUE */ HSE_VALUE 值的大小决定了,时钟滴答的周期。 这个值的设置不会影响主频的时钟周期以及相关timer的变化。 __weak uint32_t HAL_RCC_GetSys原创 2017-04-19 10:23:09 · 2298 阅读 · 0 评论 -
工程添加boot后需要设置----中断向量表的偏移量设置
3.2 中断向量表的偏移量设置 之前我们讲解过,在系统启动的时候,会首先调用systemInit函数初始化时钟系统,同时systemInit还完成了中断向量表的设置,我们可以打开systemInit函数,看看函数体的结尾处有这样几行代码: #ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET;原创 2017-02-24 11:17:17 · 7491 阅读 · 0 评论 -
hal库配置time需要修改库函数的地方
在这个库里添加引脚的初始化,需要添加time的就可以在下面进行添加void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim){ GPIO_InitTypeDef GPIO_InitStruct; if(htim->Instance==TIM10) { /* USER CODE BEGIN TIM10_MspPostInit 0原创 2017-02-13 14:07:29 · 6263 阅读 · 0 评论 -
STM32之FLASH操作
说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。当然, FLASH还可以用来装数据。 自己收集了一些资料,现将这些资料总结了一下,不想看的可以直接调到后面看怎么操作就可以了。FLASH分类 根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。 主存转载 2017-01-19 15:37:43 · 1666 阅读 · 0 评论 -
基于STM32AIP 设计文档 (Bootloader+3App)
Bootloader+3App 1简介.. 22 Bootloader实现原理..33 APP实现与配置..63.1 APP1程序起始地址设置方法..63.2 中断向量表的偏移量设置..73.3 *bin文件生成..73.4 步骤总结.. 84关键点.. 9附件:..10转载 2017-02-09 11:14:33 · 4139 阅读 · 1 评论 -
I2S总线简介
I2S总线I2S有3个主要信号:1.串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率=2×采样频率×采样位数 2. 帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。3.串行数据SDATA,就是用二进制补码表示的音频数据。I2S(In原创 2017-09-13 11:48:08 · 1079 阅读 · 0 评论 -
为带的使用
一. Cortex-M3存储器映射存储区最开始的1GB空间分别为code(代码)区和SRAM区,Code区使用经过针对优化的I-Code总线来连接,同理,SRAM区使用D-Code总线连接,虽然SRAM也可以用来转载和执行代码,但这样做会使CPU不得不通过系统总线来取指令,产生额外CPU等待周期,因此在SRAM中运行代码会比代码区的片上Flash中运行要缓慢。接下来的0.5GB存储空间转载 2017-09-06 17:44:31 · 546 阅读 · 0 评论 -
STM32系列后缀的意思
举例:STM32 F 103 C 8 T 6 "F"那一位指的是产品类型,现在似乎只有通用型即"F""103"那位指的是产品子系列,101= 基本型,102 = USB基本型、USB 2.0全速设备,103 = 增强型,105或107 = 互联型"C"那位指的是引脚数目,T=36脚,C=48脚,R=64脚,V=100脚,Z = 144脚"8"那位指的是FLASH的大小,原创 2017-09-30 09:50:16 · 2287 阅读 · 0 评论 -
STM32之多通道AD使用DMA采集数据
1、配置ADC配置成SCAN 连续模式。需要设置rank,每一个通道有不同的rank,也就是存放的ram。使用3个字节的buf,第一个通道放在第一个buf里。依次存放,可以循环往复。覆盖操作。buf最好设置为volatile,直接从ram里面获取值,不让编译器进行优化。1)绑定通道和ram的联系,设置采样频率。2)开始DMA采集,绑定buf。DMA配置:h...原创 2019-03-25 22:11:33 · 1910 阅读 · 0 评论 -
STM32 三路AD的使用方法
void ADC_ChannelSelect(uint32_t ADChannel){ // ADC_ChannelConfTypeDef sConfig; sConfig.Channel = ADChannel; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;//ADC_RANK_CHANNEL_NUMBER;//1;//A...原创 2018-09-30 22:11:08 · 5089 阅读 · 1 评论 -
STM32 DMA发送完成标志位的查询
void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma){ uint32_t flag_it = hdma->DmaBaseAddress->ISR; uint32_t source_it = hdma->Instance->CCR; /* Half Transfer Complete Interrupt manage...原创 2018-09-30 22:06:37 · 9331 阅读 · 0 评论 -
stm32f030cc bootloader
memcpy((void*)0x20000000, (void*)APP_START_ADD, 0xB8); SYSCFG->CFGR1 |= 0x03; jump_to_app(APP_START_ADD);原创 2018-08-11 05:13:44 · 1980 阅读 · 0 评论 -
keil 生成 bin文件
fromelf.exe --bin -o "$L@L.bin" "#L" C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o ./updata.bin ./Wings-ChargerBox/Wings-ChargerBox.axf原创 2018-07-31 14:26:46 · 311 阅读 · 0 评论 -
MCU的I2S为slave时出现噪音的解决方案
g_ak4961_i2s_tx_handle.Instance->SR__IO uint32_t SR; /*!27.5.3 SPI 状态寄存器 (SPI_SR)CRCERR8: FRE位 8 FRE:帧格式错误 (Frame format error)注意: 当 SPI 在 TI 从模式或 I2S 从模式下工作时,使用此标志#define __HAL_原创 2017-12-12 15:42:59 · 3776 阅读 · 2 评论 -
STM32 USB Audio 音量调节修改
改变音量的大小可以通过修改这个参数#define AUDIO_DEFAULT_VOLUME 70原创 2017-11-23 09:56:32 · 4397 阅读 · 0 评论 -
STM32引脚的4中输出模式
1、普通推挽输出(GPIO_Mode_Out_PP): 使用场合:一般用在0V和3.3V的场合。线路经过两个P_MOS 和N_MOS 管,负责上拉和下拉电流。 使用方法:直接使用 输出电平:推挽输出的低电平是0V,高电平是3.3V。 2、普通开漏输出(GPIO_Mode_Out_OD): 使用场合:一般用在电平不匹配的场合,如需要输出5V的高电平。原创 2017-01-12 17:57:47 · 2046 阅读 · 0 评论 -
STM32的复用功能——时钟输出(MCO)
STM32的PA.8引脚具有复用功能——时钟输出(MCO), 该功能能将STM32内部的时钟通过PA.8输出. 操作流程: 1)、设置PA.8为复用Push-Pull模式。 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;原创 2017-01-12 13:16:58 · 25530 阅读 · 4 评论 -
调试I2C遇到的一些问题
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c){ GPIO_InitTypeDef GPIO_InitStruct; if(hi2c->Instance==I2C2) { /* USER CODE BEGIN I2C2_MspInit 0 */ /* USER CODE END I2C2_MspInit 0 */原创 2017-02-06 14:48:07 · 9152 阅读 · 2 评论 -
M0内核TIME3和TIME7的应用
TIME3的应用:用TIME产生PWM波 TIME3的初始化 void MX_TIM3_Init(void){ TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig;// TIM_OC_InitTypeDef sConfigOC; h原创 2016-10-27 13:47:34 · 1201 阅读 · 0 评论 -
SPI调试小结
首先所有的数据发送和接受不查询完成标志位,只是用delay间隔来保持发送和接受就是扯淡。 正确的做法是查询标志位,代码如下: while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);//检查发送是否完成,完成以后再发送数据 SPI_SendData8(SPI2,send_data[i]);/原创 2016-11-07 11:21:39 · 10936 阅读 · 3 评论 -
*** error 65: access violation at 0x40021000 : no 'read' permission
使用MDK自己创建一个STM32F103VE核的项目加入源码后编译,正常,在线仿真单步执行出现如下问题error 65: access violation at 0x40021000 : no 'read' permission网上有好多说法,但是我试过都不行后来发现是Debug里面的设置有问题主要是下面2项设置原创 2016-07-05 10:29:35 · 1103 阅读 · 0 评论 -
STM32boot启动
BOOT0和BOOT1 STM32转载 2016-07-01 23:01:27 · 1305 阅读 · 0 评论 -
调试STM32遇到Hardfault知识总结
在NVIC中有一个硬fault状态寄存器(HFSR),它指出产生硬fault的原因。如果不是由于取向量造成的,则硬fault服务例程必须检查其它的fault状态寄存器,以最终决定是谁上访的。1、寄存器描述首先查看硬故障寄存器,判别原因。硬故障状态寄存器硬fault状态寄存器(地址:0xE000_ED2C)位段 名称原创 2016-07-10 12:41:52 · 8986 阅读 · 0 评论 -
STM32GPIO的8种工作模式
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽转载 2016-05-04 17:43:32 · 594 阅读 · 0 评论 -
STM32不使用外部晶振的接法
STM32上不使用外部晶振,OSC_IN和OSC_OUT的接法1、对于100脚或者144脚的产品,OSC_IN应接地,OSC_OUT应悬空2、对于少于100脚的产品,有两种接法:OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能分别重映射OSC_IN和OSC_OUT到PD0和PD1,再配置PD0和PD1为推免输出并输出0此方法可以减小功耗原创 2016-04-29 17:23:55 · 12286 阅读 · 1 评论 -
调试STM32时遇到hardfault 的一些感悟
在调试STM32的时候很容易遇到hardfault,遇到hardfault的原因很多。其中在调试的这一段时间里,产生此问题的根源大多是硬件的问题。由于焊接水平的限制,短接几个引脚或者虚焊几个引脚是很正常的。我们只要不用短接或者虚焊的引脚就能绕过hardfault的问题。比如在我调试测试工装的时候,本来使用4测点,测试四路的高低电平。结果发现,四路全开会引起hardfault ,折腾了好几天原创 2016-04-13 14:50:15 · 1872 阅读 · 0 评论 -
STM32时钟详解
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。转载 2015-03-18 17:05:46 · 808 阅读 · 0 评论 -
5线制jlink仿真接线的方法
pin1-vccpin7-tms/swdiopin8-gndpin9-tck/swclkpin15-nsrst/reset原创 2015-03-31 10:39:39 · 2740 阅读 · 0 评论 -
STM32 CAN 波特率的计算
STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用.bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的,然后再看看有了转载 2015-03-11 22:18:59 · 3201 阅读 · 0 评论 -
ADC的校准
在ADC使用的时候需要对AD进行校准,校准的代码是在数据手册的demo里面。 A.7.1 ADC Calibration code example /* (1) Ensure that ADEN = 0 */ /* (2) Clear ADEN */ /* (3) Launch the calibration by setting ADCAL */ /*原创 2016-11-16 08:48:57 · 10081 阅读 · 0 评论 -
用time3产生PWM,用time7做定时器
1、time3产生PWMvoid MX_TIM3_Init(void){ TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig;// TIM_OC_InitTypeDef sConfigOC; htim3.Instance = TIM3; htim3.I原创 2016-11-18 12:05:57 · 2020 阅读 · 0 评论 -
SPI引脚的配置
/**SPI2 GPIO Configuration PB12 ------> SPI2_NSS PB13 ------> SPI2_SCK PB14 ------> SPI2_MISO PB15 ------> SPI2_MOSI */ GPIO_InitStruct.Pin = GPIO_PI原创 2016-12-01 08:41:46 · 6987 阅读 · 0 评论