lb0857 发表于 2024-2-3 08:50:24

使用cubemx中hal库做项目的多吗

rt。
stm趋势就是cubemax,国产芯片也有厂家开始布局,坛友中高手如云。听听大家看法。

lb0857 发表于 2024-2-3 08:53:52

有人说此工具,对新人很友好。
一旦有问题,如同:https://www.amobbs.com/forum.php?mod=viewthread&tid=5759660&highlight=cubemax&mobile=2
对新人就是难以跨越大山。

akey3000 发表于 2024-2-3 09:14:22

用标准库,参照原厂例程也慢不了多少。可视化,自动生成代码,容易上手,但对底层驱动的实现可能就了解得少了些

lb0857 发表于 2024-2-3 09:28:02

akey3000 发表于 2024-2-3 09:14
用标准库,参照原厂例程也慢不了多少。可视化,自动生成代码,容易上手,但对底层驱动的实现可能就了解得少 ...
(引用自3楼)

特别是初始化函数,最基本的也是cubemax最擅长的,一旦有bug,很难查。

contonuncle 发表于 2024-2-3 09:45:43

這東西兩極分化很嚴重,而且不少人說還有重大bug.
很久沒用st了,發展那麼多年嚴重bug還有?

zchong 发表于 2024-2-3 09:58:37

可以用,但是需要深入了解一下整个架构。楼上很多兄弟都说了,不出问题还好,一出问题就有点抓瞎,回调用的比较多,导致代码的调用关系稍微复杂。

sd.shi 发表于 2024-2-3 10:06:47

可以试试LL库,基本就是对寄存器操作的封装

Stm32Motor 发表于 2024-2-3 10:19:02

我是生成初始化代码,其他地方直接操作寄存器

Flyback 发表于 2024-2-3 11:36:20

cubemax开始做项目是七八年前了,早期的版本bug多

需要习惯HAL库对串行接口和DMA的管理

早期做emwin,后来做touchgfx都很方便

lb0857 发表于 2024-2-3 12:03:29

Flyback 发表于 2024-2-3 11:36
cubemax开始做项目是七八年前了,早期的版本bug多

需要习惯HAL库对串行接口和DMA的管理

(引用自9楼)

刚刚接使用的时候,定时器中断都是一个知识点也学习地方。
整体来说,太繁琐。函数调度绕来绕去,眼花缭乱的感觉

honami520 发表于 2024-2-3 12:25:55

这玩意不就是用来生成新工程,基本就是个初始化的玩意吗?
项目做多了,都是拿之前的代码改,哪有人每个项目都用这个去做初始化呢

asj1989 发表于 2024-2-3 13:37:44

cubemx经常用,但是基本上都是使用LL库,初始化挺方便的

lb0857 发表于 2024-2-3 13:41:09

asj1989 发表于 2024-2-3 13:37
cubemx经常用,但是基本上都是使用LL库,初始化挺方便的
(引用自12楼)

使用ll库,都是大牛。
项目时序要求高吧

asj1989 发表于 2024-2-3 13:47:24

lb0857 发表于 2024-2-3 13:41
使用ll库,都是大牛。
项目时序要求高吧
(引用自13楼)

不是,纯属看不习惯hal库,LL库我感觉更简单,效率也高

ackyee 发表于 2024-2-3 13:53:08

会有坑 比方说   几年前cubemx 生成的STM32H7uart 代码在发送的过程中被接收打断,会有概率 使得 接收中断无法再次进入

但是稍微做下调整   这个问题就解决了

总的来说还是很友好的

lb0857 发表于 2024-2-3 14:00:00

ackyee 发表于 2024-2-3 13:53
会有坑 比方说   几年前cubemx 生成的STM32H7uart 代码在发送的过程中被接收打断,会有概率 使得 接 ...
(引用自15楼)

是的,一旦遇到bug
遇到第一次换芯片或者新项目的时候,
费时费力哦

阿豪博士 发表于 2024-2-3 14:03:14

应该不少的。

redworlf007 发表于 2024-2-3 15:49:19

初始化用的hal,其他的自己改造。

ibmx311 发表于 2024-2-3 17:33:07

坚决不用,抵制hal,换芯片,换不成就不用,绝不能低头。我以前是觉得我电脑太慢编译H7特慢,后来换了i9也还是觉得不能忍受,还在机房试过3495都不行,所以就干脆不用了。后来有人说象征性给一点点钱就给干,我信,但我要改动一下怎么办,不想关掉浏览干脆放弃了。我确实要用到adc读我的测距数据,但没法办啊,后来被迫自己做了adc。

lb0857 发表于 2024-2-3 18:24:13

ls牛,不是私营企业上班吧

jianfengxixi 发表于 2024-2-3 19:14:51

用的很爽,修改生成文件只在规定地方修改,可以随时重新生成而自己代码仍在,但是一些地方有问题,比如UART一些中断明明没开,只开了接收中断,但是还是会因为其他原因进入中断,很奇怪!!!

akey3000 发表于 2024-2-3 19:46:53

jianfengxixi 发表于 2024-2-3 19:14
用的很爽,修改生成文件只在规定地方修改,可以随时重新生成而自己代码仍在,但是一些地方有问题,比如UART ...
(引用自21楼)

不会吧,这bug也太明显了

qtechzdh 发表于 2024-2-3 20:06:21

jianfengxixi 发表于 2024-2-3 19:14
用的很爽,修改生成文件只在规定地方修改,可以随时重新生成而自己代码仍在,但是一些地方有问题,比如UART ...
(引用自21楼)

我也遇到过UART这个问题

lb0857 发表于 2024-2-3 20:11:44

qtechzdh 发表于 2024-2-3 20:06
我也遇到过UART这个问题
(引用自23楼)

后来,咋解决的呢。
此贴慢慢会成为cubemax避坑贴了。

hushaoxin 发表于 2024-2-3 20:54:34

入门容易,其实一个工程的初始化部分只是很少工作量,养成自己写的好习惯,出了问题好查。对于新单片机,cubemx的bug也不少,一旦太依赖了就没法继续了。

lb0857 发表于 2024-2-3 21:14:59

hushaoxin 发表于 2024-2-3 20:54
入门容易,其实一个工程的初始化部分只是很少工作量,养成自己写的好习惯,出了问题好查。对于新单片机,cu ...
(引用自25楼)

是滴,我也是基于这样出发点,才没有完全投进去用。

kitten 发表于 2024-2-4 00:00:02

没问题的,做了N多项目(N>10)。个别项目的出货量还很大,没有遇到什么bug。

kitten 发表于 2024-2-4 00:01:49

本帖最后由 kitten 于 2024-2-4 00:03 编辑

ibmx311 发表于 2024-2-3 17:33
坚决不用,抵制hal,换芯片,换不成就不用,绝不能低头。我以前是觉得我电脑太慢编译H7特慢,后来换了i9也 ...
(引用自19楼)

编译慢跟用啥库没太大关系,虽然用hal尺寸会大一点。直接把keil的编译器改成V6会爽的起飞。另外H7出了hal和LL库貌似不支持别的了吧。直接用寄存器的大牛就另说了。

kitten 发表于 2024-2-4 00:05:31

10年前大家讨论的最多的是用汇编还是C,5年前大家讨论的最多的是用寄存器还是用库函数,现在讨论的是用cubemx+hal库还是用标准库。你看看现在还有人问题前面两个问题么?结果显而易见的,

ibmx311 发表于 2024-2-4 02:49:55

kitten 发表于 2024-2-4 00:01
编译慢跟用啥库没太大关系,虽然用hal尺寸会大一点。直接把keil的编译器改成V6会爽的起飞。另外H7出了hal ...
(引用自28楼)

想换,但老出问题,干脆不用了,哪天没辙了再说吧。我相信照目前的形式,2g的大容量存储器单片机就在路上。到时候要用系统了也无所谓啥库不库的

lb0857 发表于 2024-2-4 06:51:51

kitten 发表于 2024-2-4 00:05
10年前大家讨论的最多的是用汇编还是C,5年前大家讨论的最多的是用寄存器还是用库函数,现在讨论的是用cube ...
(引用自29楼)

回头看,都具有一定历史背景,
1:芯片内部资源不够
2:3.5之后,标准库逐步完善,先期版本的坑官方没有发现,电工在坑中和中往坑中的路😆。
3:性质和2相识。

新生事物出现,都会伴随一定助力。

jianfengxixi 发表于 2024-2-4 11:06:08

lb0857 发表于 2024-2-3 20:11
后来,咋解决的呢。
此贴慢慢会成为cubemax避坑贴了。
(引用自24楼)

我程序里面只开了接收FIFO达到阈值中断,但是中断处理里面一定要判断FIFO非空、帧错误、噪声错误、OVERRUN,并且清除它们,否则就会卡死!!!

陆小凤之北京 发表于 2024-2-4 11:42:12

以前芯片资源少,需要尽量简化代码,闪转腾挪提升代码效率。现在代码资源都很充裕了。

不过还是习惯用寄存器和库函数。

陆小凤之北京 发表于 2024-2-4 11:48:14

jianfengxixi 发表于 2024-2-4 11:06
我程序里面只开了接收FIFO达到阈值中断,但是中断处理里面一定要判断FIFO非空、帧错误、噪声错误、OVERRU ...
(引用自32楼)

说明你通讯总线有问题,错误寄存器不停增长,最后溢出了。可能需要加终端匹配,在溢出的时候可以复位UART。

以前在CAN通讯遇到过,在家里测试都是很稳定的,完全没错。在应用现场几十台设备,就会有各种总线异常不断累积。

akey3000 发表于 2024-2-4 11:51:50

陆小凤之北京 发表于 2024-2-4 11:48
说明你通讯总线有问题,错误寄存器不停增长,最后溢出了。可能需要加终端匹配,在溢出的时候可以复位UART ...
(引用自34楼)

按道理没开对应中断不会进中断啊

lb0857 发表于 2024-2-4 11:57:17

jianfengxixi 发表于 2024-2-4 11:06
我程序里面只开了接收FIFO达到阈值中断,但是中断处理里面一定要判断FIFO非空、帧错误、噪声错误、OVERRU ...
(引用自32楼)

stm串口,清除中断标记的时候,随带着把有几个清楚。这是从F103开始的习惯,哈哈😊

Doding 发表于 2024-2-4 12:08:10

jianfengxixi 发表于 2024-2-4 11:06
我程序里面只开了接收FIFO达到阈值中断,但是中断处理里面一定要判断FIFO非空、帧错误、噪声错误、OVERRU ...
(引用自32楼)

最后一行HAL_UART_IRQHandler里面各种异常处理都有,要使用IRQHandler里的回调函数,不是在IRQHandler前先处理数据。
HAL有一定局限性,不适合HAL的使用方式,最好直接用LL操作。

Doding 发表于 2024-2-4 12:09:36

akey3000 发表于 2024-2-4 11:51
按道理没开对应中断不会进中断啊
(引用自35楼)

调用HAL_UART_Receive_IT的时候,PE,ERR,RXNE都打开了。

jianfengxixi 发表于 2024-2-4 12:29:35

Doding 发表于 2024-2-4 12:09
调用HAL_UART_Receive_IT的时候,PE,ERR,RXNE都打开了。
(引用自38楼)

没调用这个函数,发生中断后用调试器停止运行,查看了寄存器CR1,CR3,确定此时这些中断是没有使能的{:smile:}

lb0857 发表于 2024-2-4 13:44:55

jianfengxixi 发表于 2024-2-4 12:29
没调用这个函数,发生中断后用调试器停止运行,查看了寄存器CR1,CR3,确定此时这些中断是没有使能的{:sm ...
(引用自39楼)

按理说,啥库最终还是寄存器操作的本质,
究竟是哪一个命令让ta自作多情的操作😆

Doding 发表于 2024-2-4 13:45:23

jianfengxixi 发表于 2024-2-4 12:29
没调用这个函数,发生中断后用调试器停止运行,查看了寄存器CR1,CR3,确定此时这些中断是没有使能的{:sm ...
(引用自39楼)

看一下打开中断调用的那个函数,都打开了哪些,HAL要用回调,不要自己大幅度改程序流程。

陆小凤之北京 发表于 2024-2-4 14:33:31

Overrun error
An overrun error occurs when a character is received when RXNE has not been reset. Data
can not be transferred from the shift register to the RDR register until the RXNE bit is cleared.

The RXNE flag is set after every byte received. An overrun error occurs if RXNE flag is set
when the next data is received or the previous DMA request has not been serviced. When
an overrun error occurs:
• The ORE bit is set.
• The RDR content will not be lost. The previous data is available when a read to
USART_DR is performed.
• The shift register will be overwritten. After that point, any data received during overrun
is lost.
• An interrupt is generated if either the RXNEIE bit is set or both the EIE and DMAR bits
are set.
• The ORE bit is reset by a read to the USART_SR register followed by a USART_DR
register read operation.

zhcj66 发表于 2024-2-4 21:21:16

用usb库的时候,发现自己慢慢改比较麻烦,于是被逼 用了cube做为初始化, 用的时候还是对照寄存器进行设置, 缩减了不少工作量,目前还未发现bug, 中断都是使用自己的,没有用HAL,上面的电工也提到过,绕来绕去头大,不如自己实现感觉直观

kitten 发表于 2024-2-4 23:23:11

zhcj66 发表于 2024-2-4 21:21
用usb库的时候,发现自己慢慢改比较麻烦,于是被逼 用了cube做为初始化, 用的时候还是对照寄存器进行设置, 缩 ...
(引用自43楼)

hal库本身对中断的处理都是用__weak修饰了,不需要看他绕来绕去的东西,直接自己重定义一个就可以了。

carefree1986 发表于 2024-2-14 10:18:26

我从4年前就开始用hal了,已经用习惯了

modu8888 发表于 2024-2-14 11:58:00

16年以来一直用HAL库,除了用在ST,也在GD上跑。

lb0857 发表于 2024-2-14 12:00:23

carefree1986 发表于 2024-2-14 10:18
我从4年前就开始用hal了,已经用习惯了
(引用自45楼)

遇见有坑吗

lb0857 发表于 2024-2-14 12:01:21

modu8888 发表于 2024-2-14 11:58
16年以来一直用HAL库,除了用在ST,也在GD上跑。
(引用自46楼)

gd也有自己的hal库,界面大同小异。

carefree1986 发表于 2024-2-14 13:05:18

lb0857 发表于 2024-2-14 12:00
遇见有坑吗
(引用自47楼)

坑很多,需要自己一点一点填,做hal库的人绝对不懂什么叫做工业产品

akey3000 发表于 2024-2-14 13:09:29

lb0857 发表于 2024-2-14 12:01
gd也有自己的hal库,界面大同小异。
(引用自48楼)

gd的还没发布

lb0857 发表于 2024-2-14 13:48:53

akey3000 发表于 2024-2-14 13:09
gd的还没发布
(引用自50楼)

某公众号上面看见国产芯片品牌有几家在做。
页: [1]
查看完整版本: 使用cubemx中hal库做项目的多吗