基于STM32从零写操作系统系列---基于寄存器写串口驱动

如有不详细的描述、错误或疑问,欢迎留言!!!

基于STM32从零写操作系统系列---前言与目录

目的 

尝试基于寄存器层面,编写串口的驱动。用这种方式编写串口驱动,有点类似于使用汇编语言。面向的是每一个单独的寄存器,通过读、改、写的手段,配置寄存器。但是这种方式能够更接近硬件,用硬件的思维编程。

相对于《基于STM32从零写操作系统系列---使用C语言》,这章重新调整了文件结构,让项目文件更好管理和维护。主要使用了makefile的嵌套编译方法来编译多目录下的代码文件。

分析

1.Makefile嵌套编译

首先简单来看一下文件结构:

再看一下顶层Makefile,主要差异如下:

 各子目录下的Makefile比较简单

 

其中需要注意的是:

在windows的cmd命令行中for命令用于查找文件,@echo用于输出找到的文件路径。这与linux系统中的find命令类似。OBJS变量中的多个.o文件用于链接生成.out文件。

2.寄存器与串口驱动编写

设置某个功能,本质就是向寄存器某个位或字段写入相关数据。所以必须看清楚你要写入的寄存器的地址是否准确,修改的位或字段是否准确。 

3.在led.c中调用串口1初始化函数

4.编译下载调试

由于USART1.c使用了<>尖括号的头文件,还有编译选项中使用了 -nostdinc -nostdlib(即不用标准头文件和标准库),所以确保编译选项中有-I(大写i)并路径正确。

小结

源代码在这里

 源代码里有更详细的注释。我在stm32f103zet6平台上测试过,是可以用的。如果不行,可以自己调试以下,找出错误或平台的差异。

发布了27 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/drsonxu/article/details/87715007