本次的主要任务如下:
基础任务:
1. 搭建keil环境,实现开发板测试,利用定时器实现LED亮灭1秒
2. OLED 显示文字信息3. 继电器控制抽水泵通断
进阶任务:
1. 实现流量计测量功能
2. 实现定量 100ML,200ML 水量控制
咱们简单分析一下任务,得到一个开发板,我们手首要实现的就是开发环境的搭建,实际上F103是一个已经存在很多年并且支持多种开发库的器件,为了适应潮流,咱们本次也使用HAL进行开发,使用STM32CubeMX进行代码初始配置,通过控制LED闪烁来判断程序运行状态,正好对应的就是基础任务第一项,要求使用keil环境,这个配置的时候选择这个就可以,定时器实现LED亮灭,这里设计到了定时器和板载LED控制,其实这里还应该加入按键的采集,毕竟唯一的控制手段只有这个。
在完成基础任务一后就要开始进行各种外设模块的驱动设计了,这里主要设计的就是OLED的显示屏的控制,目前还诶哟具体了解OLED的通信方式,通过看模块的引脚大概率是通过IIC通信的,可以通过硬件IIC进行也可以通过软件IIC模拟,继电器的控制实际上就是GPIO的输出控制,这个相对就没什么难度了。
本次活动除了基础任务实现,也鼓励进阶任务的实现,主要就是通过流量计进行流量采集,实现精准流量的输送,这里主要设计的就是流量计的驱动设计,已经定时采集实现液体流量的累积采集。
基础任务一:
接下来我们就是用STM32CubeMX来搭建F103的keil工程,首先检查一下是否包含F1的固件库:
接下来通过开发板创建工程:
接下来进行工程配置:
接下来进行时钟配置:
之前我们在进行时钟配置的时候都需要去PCC手动开启,这个板子生成的工程直接开启了,基本外设应该也是配置完的,那么接下来我们就主要看一下定时器配置,基本定时功能使用的是TIM3,定时10ms:
并开启中断:
接下我们生成工程,由于需要实现定时器控制LED亮灭,这里需要再初始化里开启定时器:
HAL_TIM_Base_Start_IT(&htim3);
然后编写定时器中断回调函数,定时为10ms,所以计数达到100时进行LED的翻转:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM3) { HAL_IncTick(); Timer_cnt++; if(Timer_cnt>=100){ Timer_cnt = 0; HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin); } } }
接下来就可以看到LD2以一个1s的间隔进行亮灭操作效果如下: