最近做了一个项目使用Cube自动生成代码,然后利用HAL库进行编程。芯片为STM32F103C8T6进行编程。
I2C读写
1. 地址需要自己左移1位(stm32中需要,但是NXP中不需要),LPC系列的以前用过一款,函数内部自动左移了。
2. SCL,SDA通信时需要接上拉电阻,然后接到高电平,否则通信不同,显示I2C处于busy状态。
FLASH读写
1. 注意Flash保存数据的起始地址,还要注意内存大小,是1KB,还是2KB,还是128KB
2. Flash擦除时有方法,不要统一擦除,比如:128KB,可以分为128个1KB的区域,每次写1KB,写满后再统一擦除。而且写入Flash时第一个地址要写入自己设定的值,判断擦除时需要判断第一个地址的内容是否相同。
定时器多通道捕获PWM脉冲数
HAL_TIM_IC_Start_DMA()这个函数,如果只用了定时器的一个通道,那使用没有问题。如果使用了个通道,那就需要改HAL库里这个函数的程序。如下图所示
注释掉之后,定时器多通道捕获PWM脉冲数就可以正常使用。要不然只有一个通道可以正常使用,另一个通道调用这个函数的状态就是HAL_TIM_STATE_BUSY。
CAN总线(CAN_MODE_LOOPBACK)
1. 使用CAN总线协议进行发送接收数据时,经常会发生HAL_TIMEOUT的现象。但是以前1.31的版本就不会有,我用的1.60版本,对比发现是下图中的CAN_TSR_TX0K2被省略了。
2. 再进行多次测试时,我们发现了另外一个问题,CAN回调函数接收数据只能接收一次。
发现在调用HAL_CAN_Receive_IT()函数时,第二次时CAN的状态就变成LOCK的,没有进入__HAL_CAN_ENABLE_IT函数,导致中断只进入一次。可以在回调函数中加入这个函数。如下图:
3. 双机通信不需要修改修改上面的2点。就CAN_MODE_LOOPBACK模式需要修改。
其他还没有发现HAL库什么问题,有问题我会继续补充。
关键字:STM32 Cube I2C读写
引用地址:
STM32 使用Cube的心得(一)
推荐阅读最新更新时间:2024-11-10 18:24
STM32滴答定时器(Systick)详细详细解析
在ARM Cortex-M3内核中有一个Systick定时器,它是一个24位的倒计数定时器,当计数到0时,它就会从Load寄存器中自动重装定时初值,只要不把CTRL寄存器中的ENABLE清0,它就永不停。对于滴答定时器的理解主要分为下面几项: 1.滴答定时器的时钟来源 看上面的图会有一个错觉,以为滴答定时器是系统时钟的1/8,其实不是,滴答定时器的时钟既可以是HCLK/8,也可以是HCLK,这个是通过CTRL寄存器进行设定的,了解这一点,对于操作系统的时钟计算很重要,因为要精确计算时钟时间。 2.滴答定时器的寄存器 从这里就能看出,时钟源有两种选择 3.滴答定时器的库函数 (1)寄存器定义在哪?————在core
[单片机]
STM32学习笔记之 重映射功能
简介:最近在学习STM32,在BZ上一篇关于的串口通信文章里有这么一段代码:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE); 当初是参考开发的里子写的一直对GPIOD或上 RCC_APB2Periph_ ... 关键字: STM32 重映射 最近在学习STM32,在BZ上一篇关于的串口通信文章里有这么一段代码:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE); 当初是参考开发的里子写的一直对GPIOD或上 RCC_APB2Peri
[单片机]
STM32 窗口看门狗
简介:窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位 (WWDG- CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。 库函数中用中断的方式来喂狗的方法,窗口看门狗库函数相关源码和定义分布在文件stm32f10x_wwdg.c 文件和头文件 stm32f10x_wwdg.h 中。步骤如下: 1)使能 WWDG 时钟 WWDG使用的是 PCLK1 的时钟,需要先使能时钟。方法是: RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, EN
[单片机]
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_Mode_AF_PP 复用推挽输出 对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总结: 推挽输出:可以输出高,低电平,连接数字器件;
[单片机]
STM32应用简章之外部中断
①初始化IO口为输入。 GPIO_Init(); ② 开启IO口复用时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); ③设置IO口与中断线的映射关系。 void GPIO_EXTILineConfig(); ④初始化线上中断,设置触发条件等。 EXTI_Init(); ⑤配置中断分组(NVIC),并使能中断。 NVIC_Init(); ⑥ 编写中断服务函数。 EXTIx_IRQHandler(); ⑦清除中断标志位 EXTI_ClearITPendingBit();
[单片机]
STM32Cube微控制器开发软件在GitHub正式上线
意法半导体在人气颇高的代码托管网站平台GitHub上发布了STM32Cube嵌入式软件,向开发者开放STM32嵌入式软件源代码,充分利用该网站软件更新发布更快、更高效的优势,推进协同便利的开发模式利用。 在GitHub上发布STM32Cube软件全部原始代码,可以让1000多款STM32 *Arm®Cortex®-M微控制器(MCU)和异构Cortex-M /-A微处理器的用户轻松存储、管理、跟踪和控制自己的软件代码。GitHub的功能,例如,Pull请求,可以促进协同开发模式,使社区能够利用GitHub的修改处理结构,提供替代解决方案和新功能。此外,用户通过GitHub Issues(开发人员之间的特权沟通渠道)可以提
[单片机]
STM32中定时器的时钟源
STM32中有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。 下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图: 从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分。 下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当 APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟
[单片机]
stm32库函数GPIO_Init()解析
GPIO_Init函数是IO引脚的初始化函数,进行个个引脚的初始化配置,主要接受两个参数,一个是配置引脚组(GPIO_TypeDef* GPIOx),一个是配置的参数( GPIO_InitTypeDef* GPIO_InitStruct),具体如下 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) /*其中第一个参数为那组引脚,每组拥有16个引脚,每组都具有不同的寄存器配置地址,第二个参数是一个数据结构,也就是将基本配置信息放在这个数据结构里面,再将这个结构传入函数进行配置*/ //其中数据机构可以表示为如下 typede
[单片机]