STM32 使用Cube的心得(一)

最近做了一个项目使用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库什么问题,有问题我会继续补充。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读