前言

本文是基于b站up主keysking的stm32教学视频,对于一些可能存在的一些问题进行回答

问题及解答

问题
cubeide否有代码提示功能
解答
Alt+/ 代码提示,显著提高效率
MAC是Option+/, 通常Win上的Alt键跟Mac上的Option键是对应的

问题
如果打开安装包出现
“Error! Can‘t initialize plug-ins directory Please try again later”
解答
如果安装STM32CubeIDE时需要更换安装路径,请确保安装路径中没有中文。工作空间的路径中也不要有中文。否则会有奇奇怪怪的事情发生。

问题
Error in initializing ST-LINK device.
Reason: ST-LINK: Could not verify ST device! Abort connection
解答
CubeIDE会验证芯片.盗版芯片验证不通过,就会这样.

问题
STM32cubeide安装failed to load jni shared library
解答
用管理员身份才能运行,双击会报错

问题
处理中断的高级方法
解答
可以配合定时器,状态机。或者有FreeRTOS的话专门开个处理中断的线程

问题
延时优先级比外部中断高的话,那while循环中是要等一个延时完成后才能进入外部中断吗
解答
HAL_Delay本身不是中断,只是依赖系统滴答中断提供时钟基准,系统滴答中断每1ms就中断一次,不管有没有运行HAL_Delay,它都会中断

问题
如果高优先级中断在执行,但是此时触发了两次低优先级中断,是不是第一次低优先级中断就丢失了?
解答
你要这样理解, 来中断后会设置中断标志位为1, 然后就会执行相应的中断处理函数. 如果你说的两个低优先级中断是同一个中断的话(假设叫A中断), 那么第一次中断时, A中断的中断标志位被设置为1, 由于高优先级中断在执行, 所以A中断的处理函数未执行,也就没有清中断标志位, 所以第二次中断来时, A中断的中断标志位依旧为1, 没有任何变化. 当高优先级中断结束后, A中断的中断标志位被发现是1, 然后执行A中断的中断处理函数. 所以, 两次低优先级中断确实被并成一次中断了. 但是也不好说到底是哪次的….

问题
用usb转rs232线的2,3,5号线接单片机的串口针.电脑收到的是乱码.但波特率是一样的
回答
单片机上只能接收TTL电平信号,不能直接用RS232接到单片机上哦,需要使用RS232转TTL模块,或者USB转TTL

问题
突然不能把程序烧录到板子里了?提示Error  message from debug German back end: localhost:61234: connection timed out.
回答
针对SWD端口占用导致控制台报错no device found on target:可以看以下文档
https://docs.keysking.com/docs/stm32/FAQ/DownloadFailed/CompilationFailed
(报错要看控制台的信息而不是这个弹窗,61234只是端口号)

问题
用的不是UP主的学习板,自己买的学习板是用的PA9和PA10作为端口,结果用其他调试助手就能够正常发送hello world,但是up主的调试助手就没有接收信息显示
回答
是RTS和DTR的配置问题。一般板子内置了转换模块芯片,只需要插上有数据传输功能的typec口线(平时说的数据线)就可以实现通信。也可能是那块stm32坏了。。。

问题
是乱码怎么办
回答
是串口接收到乱码吗? 可以看看是不是比特率选择的不一致(`・ω・´)

问题
oled不亮
解答
用OLED_DisPlay_On();或配置上拉电阻

问题
串口助手网站出问题了嘛,我在其他串口软件接收发送都正常,在这个网站就收不到数据。或者是为什么我打开串口助手网站是一片灰色?
解答
目前只支持Chrome和Edge浏览器

问题
在第十集中 main.c文件中显示’hdma_usart1_rx’ undeclared (first use in this function)和undefined reference to `_HAL_DMA_DISABLE_IT’这两个问题我应该怎么解决啊
解答
是不是在CubeMX中勾选了Generate peripheral initialization as a pair of ‘.c/.h. files per peripheral
应该是你勾上了为每个外设生成单独的.c.h文件
也可在uasrt.h文件中添加这些代码
extern DMA_HandleTypeDef hdma_usart3_rx;
extern DMA_HandleTypeDef hdma_usart3_tx;

问题
up,请问这个支持ble的串口调试助手在哪下?资料包里没看到
解答
不用下载,网页版的 serial.keysking.com

问题
kkOLED屏幕的品牌名,其他OLED怎么用这个库
解答
中景园 SSD1306 128*64,其他屏幕就修改一下初始化和SendCmd函数里的指令就好了。另外用的不是i2c1的话,Send函数也改一下(一般修改地址就行,要算)

如果要在回调函数中使用HAL_Delay(),就必须配置中断优先级 System Core -> NVIC,将 Time base: System tick timer 的主要优先级调到比EXTI line高否则 HAL_Delay() 函数无法在中断回调函数中执行,会导致程序卡在回调函数中