这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转】STM32使用Cube的心得

共3条 1/1 1 跳转至

【转】STM32使用Cube的心得

工程师
2021-01-20 15:48:46     打赏

最近做了一个项目使用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库里这个函数的程序。如下图所示

1611197103708222.png

注释掉之后,定时器多通道捕获PWM脉冲数就可以正常使用。要不然只有一个通道可以正常使用,另一个通道调用这个函数的状态就是HAL_TIM_STATE_BUSY。

CAN总线(CAN_MODE_LOOPBACK)

1. 使用CAN总线协议进行发送接收数据时,经常会发生HAL_TIMEOUT的现象。但是以前1.31的版本就不会有,我用的1.60版本,对比发现是下图中的CAN_TSR_TX0K2被省略了。

1611197138773227.png

2. 再进行多次测试时,我们发现了另外一个问题,CAN回调函数接收数据只能接收一次。

发现在调用HAL_CAN_Receive_IT()函数时,第二次时CAN的状态就变成LOCK的,没有进入__HAL_CAN_ENABLE_IT函数,导致中断只进入一次。可以在回调函数中加入这个函数。如下图:

1611197163639038.png

3. 双机通信不需要修改修改上面的2点。就CAN_MODE_LOOPBACK模式需要修改。

其他还没有发现HAL库什么问题,有问题我会继续补充。


*转自CSDN,https://blog.csdn.net/tingfenghanlei/article/details/80481578



工程师
2021-01-20 17:19:28     打赏
2楼

感谢楼主分享


工程师
2021-01-30 23:55:27     打赏
3楼

心得总结的还是不错的


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]