UART:异步、串行、查分;USART:同步
电平信号:
RS232:-3~-15v为1,+3~+15为0;抗干扰距离远
TTL:+5v为1,0v为0,距离近不抗干扰,多用于电路内部或15m以内
串口中有个Transmit Buffer 寄存器,这个一会儿和FIFO一起说;还有个波特率发生器,它由时钟源为基础而产生。流控是有一根流控线,在发送机、接收机二者之间相连,每完成一个位的发送或者接收,就控制流控线改变,从而告知对方接受完成可以接受下一位数据了,一般在二者的速率不一样时使用。
串口的其他功能模式:
① FIFO(FIRST IN FIRST OUT)模式,在上图中,非FIFO模式下每次只能传一个字节的数据,传完之后需要重新想buffer里面写新的一个字节;而开启FIFO后,可以一次性向buffer发送多个字节,再传输,就不用多次只传一个字节时的跳转开销了
② DMA:direct memory access,直接内存访问,在交换数据时,由硬件自己完成,避免了占用CPU,对比FIFO,FIFO是轻量级的,而DMA可以自己指定一段内存,直接从内存向外发,只要内存大小允许,可以指定很大的缓存空间。在stm32的学习过程里面,做过相关的实验。
③ IrDA模式(Infra-Red红外线),以有无红外信号来判断0和1
各个串口通道对应的功能如下图,
5.4.1 常用寄存器
5.4.1.1 串口线控制寄存器
选择串口模式(红外模式还是普通模式,一般是用普通模式);奇偶校验位;停止位的位数;发送的数据长度
5.4.1.2 串口控制寄存器
串口中控制时钟选择、收发中断方式、FIFO模式下的超时中断、异常状态的中断使能等
5.4.1.3 FIFO控制寄存器
控制FIFO的缓存大小、使能等
5.4.1.4 UART modem control register
看起来是控制流控相关的东西
5.4.1.5 收发缓存寄存器
里面用来放将要发送的数据,或者放收到的数据
5.4.1.6 其他寄存器
除了上面的几个常用寄存器,还有下表中的一些状态寄存器,中断屏蔽寄存器,波特率设置寄存器等
5.4.2 stdio移植
Stdio:standard input output标准输入输出,在PC中标准输入是键盘,标准输出是屏幕。其中printf和scanf可以和底层的输入输出函数绑定,然后和stdio绑定,就可以用printf输出到stdio指定的输出口
在串口的使用时,我们的输入输出都是串口
在stm32的printf移植时,我们只知道用putc里面的输出端改成串口,而不知道printf的整个实现过程
Printf中,主要用的两个关键函数
① vsprintf():这个函数用来格式化打印信息,得到纯字符串格式的打印信息,用来一会儿的输出
② putc():这个就是真正的输出函数,控制标准输出硬件,将信息发送出去
Stdio库函数的应用,库函数里有个makefile作为子makefile,他的用法可以参照子makefile
这个是printf函数,const char* fmt是字符串,任何是可变参数
5.4.3 程序