历史上的今天
今天是:2024年09月10日(星期二)
2019年09月10日 | 基于STM32从零写操作系统系列---基于寄存器写串口驱动
2019-09-10 来源:eefocus
目的
尝试基于寄存器层面,编写串口的驱动。用这种方式编写串口驱动,有点类似于使用汇编语言。面向的是每一个单独的寄存器,通过读、改、写的手段,配置寄存器。但是这种方式能够更接近硬件,用硬件的思维编程。
相对于《基于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)并路径正确。
史海拾趣
|
有哪位高手帮忙看一下这个电路吧,我怎么仿真不出正确的结果,我个人认为电路能够实现通过两个极性开关控制两个恒流源的流向,当上面的极性开关基极电压为高时,正恒流源的电流通过极性开关流向地,当极性开关为低时,电流通过二极管流向地,但是在 ...… 查看全部问答> |
|
有TXT文件,格式如下: 1 2 3 4 5 6 ... 如何读取该文件并将每行的数据装换为CPoint类型的x、y坐标,然后再将这些CPoint存入一个数组? 如上述例子得到结果应为: CPoint a[p1(1,2),p2(3,4),p3(5,6)...] 急用,在线等... 最好能给 ...… 查看全部问答> |
|
本人初学嵌入式,按照手册上的步骤一步一步做下来。做到通过NFS启动系统时出问题了: NFS网络文件系统的配置已经做好了,并且可以保证没有问题,设置目标板模式为Nand Flash启动,连接好电源,串口线,网线,打开串口终端,在开机的时候迅速按下PC ...… 查看全部问答> |
|
我装的是windML3.0+zinc6。0,而且我还打了zinc的补丁!!! 不知道是不是因为这个我才出错的 正常配置完windML后,我进行编译!!!报错 igs5050Snd.c: In function `igsSndDevCreate\': igs5050Snd.c:201: `igsAudioIsaRegBase\' undeclared ...… 查看全部问答> |
|
安装了CE6,导出了sdk,安装后基于此sdk建立了一个smart device的console application的project,编译时没有问题,链接时有很多类似于 libcpmt.lib(string.obj) : error LNK2019: unresolved external symbol \"public: __thiscall std::exception ...… 查看全部问答> |




