
在去年年末的大转盘活动中有幸获得了一块NUCLEO-C031C6开发板,春节前收到后随即开始建立开发平台和查找有关的资料。准备先测试相关的外设,然后驱动一块3.5寸的TFT彩屏,移植MAX30102血氧心率传感器,制作一个家用的血氧心率监测仪。 理想很丰满,现实却挺骨感。经过近两个月的测试,却发现C031C6的内存实在太小了,添加了彩屏驱动代码之后,内存就爆满了,无法完成编译(见下图),最后想方设法优化代码,才勉强完成彩屏的驱动,至于移植MAX30102的代码则成了空想。看来要实现原来的设想,也许需要新推出的C071或者C091的开发板才能够胜任。 现将这两个月的测试过程进行总结整理,并陆续发布出来让大家评论,并希望各位指正其中的不足或错误。 和大家一样,拿到开发板并建立好开发平台之后,首先就是测试点灯及板载的用户按键,这个测试是最容易实现的。 进入CUbeMX配置平台,选中开发板之后,按照默认的配置,选择LED,BUTTON和ComPort,生成代码, 然后在主函数的循环中添加代码: `` BSP_LED_Toggle(LED_GREEN); HAL_Delay(500); 编译后下载到开发板上,板上的绿色LED灯便闪亮起来。 按键测试也不复杂,只不过是我为了实现长短按键的功能,在延时函数中走了一点弯路。我是采取中断方式读取按键,在按键中断处理代码中一旦加入了HAL_DELAY()函数就无法运行,才知道在中断处理中不能使用系统提供的延时函数,需要自己写空循环的延时函数。在自己添加延时代码时又遇到坑,原来设置循环变量时需要使用volatile前缀,否则在编译时就会被优化,延时函数不起作用。这是我通过发帖后得到坛友提示才知道的(链接https://shequ.stmicroelectronics.cn/forum.php?mod=viewthread&tid=645421&pid=2681426&page=1&extra=#pid2681426)。 实现长短按键的过程是先定义一个全局变量keys,在中断处理函数内对这个变量不断自增。在主循环中判断keys的值,若大于零就进行按键功能的处理,并根据数值的范围来确定按键的不同功能,实现多个按键,按键处理好之后再将keys的值归零。用这种方式可以轻易地识别点按、正常按键和长按三种模式,用户稍加训练则可以实现更多的模式。 按键中断处理函数如下,可以添加在main.c文件中: `` /*****
在主循环中对长短按键进行识别的代码如下: `` if(keys>0){ // printf("Keys=%d\n\r",keys); if(keys<40){ if(TFT_BL>0) TFT_BL -= 10; }else{ if(TFT_BL<245) TFT_BL += 10; } keys = 0; // printf("TFT_BL=%d\n\r",TFT_BL); htim3.Instance->CCR3 = TFT_BL; } |
STM32C092如果不使用CAN,内存可不可以拿出来用。
NUCLEO-C031C6开发板测试3——RTC的读写操作
NUCLEO-C031C6开发板测试2——定时器及PWM应用
STM32C051K8T6电路这样设计对不对
STM32C031C6delay代码的困惑
STM32c031c6 SPI Slave Transmit Only模式的疑问
STM32C031C6开发板的UART2的收发问题?
从哪里可以下载NUCLEO-C3C6开发板的范例?
stm32c011的NRST引脚复用问题
求STM32C011J4x STM32C011J6x 的标准库。
建议分享贴发布在话题—STM32话题——文章——分享。
我对如何在编辑器中添加代码还不熟悉,下面补充上面代码的截图:
1、延时函数
2、按键中断处理函数
3、按键处理函数
好的。