民启特种作业 · 安阳新乡特种作业考证咨询

首页 安阳报考专题 新乡报考专题 报名流程 考试批次 低压电工作业 熔化焊接与热切割 高处安装维护拆除 叉车司机 塔吊司机 新闻资讯 证书查询核验 证书复审 企业团报 在线预约 关于我们 联系我们
电话咨询 18236992212
首页新闻资讯文章详情

资讯详情

考试通知、政策法规、备考经验、行业动态,为安阳、新乡特种作业考证人员提供信息参考。

首页新闻资讯stm32 HAL 库改写 江协科大的程序

stm32 HAL 库改写 江协科大的程序

2026/10/12 5:31:47 民启特种作业 安阳 · 新乡考证资讯
stm32 HAL 库改写 江协科大的程序 谢谢 B 站的“水手勇敢”博主带着咱们改写了江科大的标准库程序改用 HAL 库实现保持了学习的连贯性107这里做少量记录。108main.c 文件里调用了这几个函数 但这几个函数定义在 OLED.c 源文件里而且 main.c 并没有包含 OLED.c 对应的头文件而且编译也不报错这是为啥这还是 C 语言么以下是 dou 包的回答测试 dou 包是正确的确实出现了大量关于函数调用的警告109ADC 的单次范围转换 在标准库中 单次的范围转换包含多个序列 rank对应多个 channel 全部转换完成才会停止导致数据覆盖。妥协的实现办法不用 DMA就是只用一个序列 髯口 为其配置不同的通道从而也能实现范围 scan 转换的效果。 但在 HAL CUBE 里由于配置参数的变化如下 dou 包的解释以下的代码的正确执行就依赖于 CUbe 里的这个 discontinue 机制标准库里没有这个uint16_tvalues[4]{0};//用于存放ADC数据intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();/*模块初始化*/OLED_Init();//OLED初始化HAL_ADCEx_Calibration_Start(hadc1);//使用前校准OLED_Clear();OLED_ShowString(1,1,v1:);OLED_ShowString(2,1,v2:);OLED_ShowString(3,1,v3:);OLED_ShowString(4,1,v4:);while(1){for(uint8_ti0;i4;i){HAL_ADC_Start(hadc1);//ADC启动开始转换if(HAL_ADC_PollForConversion(hadc1,HAL_MAX_DELAY)HAL_OK){values[i]HAL_ADC_GetValue(hadc1);}}OLED_ShowNum(1,5,values[0],4);OLED_ShowNum(2,5,values[1],4);OLED_ShowNum(3,5,values[2],4);OLED_ShowNum(4,5,values[3],4);HAL_Delay(1000);} 当然这种情况下最正确的做法是 DMA。110HAL 库里的结构体封装好深啊 //启动循环模式hdma_memtomem_dma1_channel1.Init.ModeDMA_CIRCULAR;// 循环 DMAHAL_DMA_Init(hdma_memtomem_dma1_channel1);//启动DMAHAL_DMA_Start(hdma_memtomem_dma1_channel1,(uint32_t*)DataA,(uint32_t*)DataB,4);while(1){for(uint16_ti0;i4;i){DataA[i];}for(uint16_ti0;i4;i){OLED_ShowHexNum(1,13*i,DataA[i],2);}for(uint16_tj0;j4;j){OLED_ShowHexNum(3,13*j,DataB[j],2);}HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}111谢谢
特种作业考证资讯 责任编辑:民启特种作业
FUWU BAOZHANG

看完文章,报名服务了解一下

从咨询到拿证,全程有人对接

条件先核对年龄、学历、体检先对照,能报才报
材料免费预审材料拍来先审,不齐的提前补
批次主动提醒报名截止、考试时间提前通知
费用透明费用报名前逐项列明,确认后再办

看完文章还有疑问?

报考条件、材料清单、考试批次,直接电话或在线咨询,几分钟给你明确答复。