STMCU小助手
发布时间:2022-8-22 17:40
|
最近能抽点时间学一下stm32了,串口通信用的挺多的,比如wifi模块,GSM模块,指纹模块等等…在这里用自己理解的写一下总结,如果有误的话请大家多多指点。 串口的基本概念 串行和并行 串行 串行是一位一位的传输。 常用的有 USART、IIC、SPI等… 串行也分为 同步通信 和 异步通信 同步: 就是一般有一根时钟线,有时钟就可以大家一起同步嘛。靠时钟来约定。一根数据线。一般一个时钟传输一个Bit位。同步的话 他们大部分都是有效数据来的。但是对于双方的时钟允许误差较小。 异步: 异步就是我们平常玩串口用的最多的,它不像同步有个时钟,异步是没有时钟,那我们得为了数据不出错,所以通过 起始位、奇偶校验位、停止位这些来降低数据的错误。 所以异步的有效数据就没有同步的有效数据那么多。效率也没有同步的那么高。 优点:传输距离远、抗干扰能力强、成本较低 缺点:传输速率慢 并行 并行是指多比特数据同时通过并行线进行传送,这样数据传送速度大大提高。 简单的理解就是 比如我们用的LCD1602不是有一共10几个引脚么,然后8根是数据线,这就是属于并行,它们通常需要数据总线(八、十六或更多线路)。 优点:线比较多嘛,所以我传输就快,这个容易理解。 缺点:线这么多,那成本也会高嘛,别人一根线搞定了,你用了8根是吧。然后距离长了,那也容易受到干扰。 通信方式 全双工 就是双方都可以同时发送和接收,相当于我们的打电话。 半双工 在同一时刻,只能一个发送、一个接收,相当于我们的对讲机。 单工 这个就是一个只能发,一个只能收。相当于广播,他那边只能发,我们只能听。 波特率 首先讲一下比特率 比特率:每秒钟传输的二进制位数,单位是(bit/s) 跟波特率有点区别的,但是有时候也一样。 波特率:表示每秒钟传输的码元个数。 码元:比如我们玩51的时候基本都是5V OV那么 5V相当于二进制1 0V就相当于二进制0。 5V——1 0V——0 有时候多个,比如 0V——00 2V——01 4V——10 6V——11 这样就跟比特率不一样了。 波特率计算 波特率 = Fck/(16*USARTDIV) Fck:串口的时钟 USARTDIV:无符号定点数 比如我想设置115200波特率 时钟是72M 那USARTDIV = 39.0625
串口的配置 代码编写步骤 我这里用USART1来举例。我这里是A9(TX)、A10(RX)(异步通信) 1:打开对应 的时钟 1.1:GPIO的时钟 1.2:串口的时钟 2.配置GPIO结构体 2.1:引脚 2.2:模式(输入还是输出) 2.3:速率(输出才用 输入不用) 2.4:对结构体成员初始化 3配置串口结构体 3.1:波特率 3.2:有效数据位 3.3:停止位 3.4:奇偶校验位 3.5:硬件控制流 3.6:模式 3.7:对结构体成员初始化 4配置NVIC中断优先级(misc.h) 如果不需要中断可以不配置NVIC 4.1:选择哪个组 NVIC_PriorityGroupConfig 4.2::哪个中断通道 (stm32f10x.h里 IRQn_Type结构体里找) 4.3:主优先级 4.4:次优先级 4.5:通道使能开启 4.6:对成员初始化 4.7:串口中断配置 USART_ITConfig(采用什么方式中断) 5串口使能 USART_Cmd(); 6:编写中断服务函数 函数名字在启动文件里找。 串口的重定向 比如我们常用输出函数 printf(); putchar(); 常用的输入函数 scanf(); getchar(); 输出 ==记得包含头文件 stdio.h == 其次你添加下面的函数既可以用printf 和 putchar了。
输入 ==记得包含头文件 stdio.h == 其次你添加下面的函数既可以用scanf 和 getchar了。
串口的例程 我这里就实现一下 电脑端串口助手发送单字符到单片机,单片机接收到就立刻也发给电脑串口助手。 比如 我在串口助手发送了 A 然后单片机接收到之后,让单片机发送receive data:A main.c
usart.c
效果呈现
———————————————— 转载:皮卡丘吉尔 |
STM32固件库分享,超全系列整理
【MCU实战经验】基于STM32F103的二轮平衡车(6轴上位机 源代...
10张图带你完全掌握STM32 GPIO,从入门到精通,收藏就够了!
如果你解决了这些问题,就可以直接学STM32
STM32的分类和选型
学习STM32很简单?
STM32到底由什么组成?内核和外设的关系又是怎样的?看这篇!
GD32和STM32的区别在哪里??
入门嵌入式,为什么都要先学STM32??
STM32中断响应延迟优化:从NVIC配置到DMA加速的极致性能调优
微信公众号
手机版