稍微有些基础,打算边做项目边学习嵌入式软件,对了,还得准备考四级,现在大四了,不考研得为找工作准备起来了,可能每天还要背些八股文。现在打算做一个送药机器人,目标100天内做出来,产品需求和需要使用的计划已经大概定下来了,打算先从主控板PCB做起,然后写代码测试,最后外观设计,但是因为资金有限打算做一个小型的,主要是为了学习不是商用,所以要求也就没有那么高。
主控板分为哪几个模块呢,主控MCU模块,电机模块,蓝牙模块,网络模块,定位模块,摄像头模块,药箱模块。大概就是这些了,打算先买模块先学习下,然后最后再把这些模块画到一张板子上面。等快递的这些天也不能闲下来,今天到了前几天买的两块stm32f103c8t6核心板,打算先把基础的通信协议学习下。
今天原本打算学习使用STM32CubeMx来练习GPIO的三个任务:点亮LED,按键检测,按键计数。但是买的按键元器件还没有到,所以几天就实现点亮LED,定时器的使用和串口printf的重定向。
一.GPIO的使用:点亮LED
1.配置GPIO
2.配置时钟控制器RCC,高速时钟HSE要用到外部晶振,因为GPIO接口都在APB2总线里
时钟树这方面没有过多的了解,但比较重要,明天会再认真学习下。
3.导出工程
4.调试代码
5.代码(hex文件)烧录
到此,这个任务就算完成了,但是还是有些疑惑:1,时钟树的配置;2.BOOT模式。带着问题去学习,嘻嘻。
二.定时器的使用和串口printf的重定向
1.STM32CubeMx配置
时钟控制器RCC配置:
GPIO配置:用于控制LED
NVIC中断配置
SYS配置
TIM2配置:
尽管要同时对串口和LED进行选择,但是只需要一个定时器便可以进行控制。将时钟源改为内部时钟,选择72分频,向上计算到9999便结束,实际计数时间为72M/72/10000,为定时间定时频率。分频系数那里虽然写的是71,但系统处理的时候会自动加上1,所以实际进行的是72分频。由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。中断时间为1/(72M/72/10000)=0.01s.
USART配置
时钟树配置
导出工程
2.Keil编写代码
printf函数重定向
在main.c
和usart.c
中添加头文件#include "stdio.h"
之后,勾选Target中的use MicroLIB,在main.c
文件中,添加如下代码,进行重定向
添加中断
添加回调函数
3.烧录测试
完工,有点晚了,今天就先这样了。