【1】工程截图
【2】代码解读
有了前面文章的基础,工程建立我不再赘述,我们来看主函数所在的源文件(这里完全可以把开头的宏定义和函数声明放到同名的头文件中)。
这里我只引用了delay.h和sys.h
可以看到这三个文件放到一个文件夹里,说明他们三个比较特殊,这里就详细介绍一下(辅助编程文件夹里的开发指南里说的很详细)。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、 usart.c及其头文件。通过这 3 个 c 文件,可以快速的给任何一款 STM32F1 构建最基本的框架。使用起来是很方便的。
delay 延时的编程思想: CM3 内核的处理器,内部包含了一个 SysTick 定时器, SysTick 是一个 24 位的倒计数定时器,当计数到 0 时,将从RELOAD 寄存器中自动重装载定时初值,开始新一轮计数。只要不把它在 SysTick 控制及状态寄存器中的使能位清除,就永不停息。 SysTick 在《STM32 中文参考手册》(这里是指 V10.0版本,下同) 里面介绍的很简单,其详细介绍,请参阅《Cortex-M3 权威指南》第 133 页。【我们就是利用 STM32 的内部 SysTick 来实现延时的,这样既不占用中断,也不占用系统定时器。】
sys 文件夹内包含了 sys.c 和 sys.h 两个文件。在 sys.h 里面定义了 STM32 的 IO 口输入读取宏定义和输出宏定义。 sys.c 里面只定义了一个中断分组函数。
usart 文件夹内包含了 usart.c 和 usart.h 两个文件。这两个文件用于串口的初始化和中断接收。这里只是针对串口 1,比如你要用串口 2 或者其他的串口,只要对代码稍作修改就可以了。usart.c里面包含了2个函数一个是 void USART1_IRQHandler(void);另外一个是void uart_init(u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉,则会导致 printf 无法使用,虽然软件编译不会报错,但是硬件上 STM32 是无法启动的,这段代码不要去修改。
由于在main函数之外我们做了很多工作,所以函数内的代码看起来很简洁。
LED的初始化函数是这里的关键,这里也是最常见的运用库函数的方式之一(调用库函数和结构体是最常见的用法)。
【3】标准库怎么使用
(1)整体看一遍STM32F103固件函数用户手册,了解具体内容,整理成自己的东西!
(2)对于函数的传参和返回值,大多数手册里面都说的很详细,不清楚的也可以上网查找示例。
(3)编程的重点就是搞清库函数的调用顺序,知道怎么调用。不要求看懂函数如何实现的。