STM32F103 -- LIN从机通讯 -- 程序代码 -- 详细讲解版(2万字长文)

         关于LIN,这里就不多介绍,但写代码前还是得知道我们应该发什么,接收什么,这一部分可以看看我对LIN总线的介绍博文,博文中还加入了我的一点理解。

        知道了我们应该发什么接收什么,那么下面内容就讲解我们如何进行收发,如何编写代码。

        主要代码分为3个文件,usart文件是对GPIO端口和串口Lin模式的初始化,lin_buffer文件是对串口环形缓冲区的编写,lin_driver文件是Lin从机模式驱动代码。通过这三个文件的代码便可实现STM32F103的LIN从机通讯。


目录

一.  全部完整 .H 文件代码

1. usart.h 文件代码 

2. lin_buffer.h 文件代码 

3.lin_driver.h 文件代码 

二.  全部完整 .C 文件代码

1. usart.c 文件代码 

2. lin_buffer.c 文件代码 

3.lin_driver.c 文件代码  

 三.  usart.c 初始化代码讲解

1. 串口的LIN模式初始化

2. 串口的LIN模式代码编写

四.  lin_buffer.c 环形缓冲区代码讲解

1. 环形缓冲区简介

2. 为什么用环形缓冲区

3. 环形缓冲区代码编写

(1)写缓冲区

(2)读缓冲区

五.  lin_driver.c 从机驱动代码讲解

1.  LIN同步间隔段发送函数   

2. LIN发送多字节函数   

3. 校验和获取函数   

4. PID获取函数   

5. LIN从机中断函数

6. LIN从机接收处理函数

六. main.c主函数代码

七. 注意


还是先给出全部完整代码,再对代码进行讲解。

一.  全部完整 .H 文件代码

1. usart.h 文件代码 

#ifndef __USART_H
#define __USART_H
 
#include "main.h" 
 
/* USART1 引脚定义 */
#define   USART1_TX_PIN   				 GPIO_Pin_9  		
#define   USART1_RX_PIN  		   		 GPIO_Pin_1
  • 44
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 59
    评论
为了将GY-US42超声波模块与STM32F103VE微控制器连接并设置为串口模式,你需要将模块的TX引脚连接到STM32的RX引脚,将模块的RX引脚连接到STM32的TX引脚。同时,还需要为UART外设选择合适的引脚。 在STM32F103VE上,你可以使用任何可用的GPIO引脚作为串口引脚。以下是一种常见的连接方式: 1.选择一个可用的GPIO引脚作为串口接收线(RX)。假设你选择了GPIOA的引脚9作为RX引脚。 2.选择一个可用的GPIO引脚作为串口发送线(TX)。假设你选择了GPIOA的引脚10作为TX引脚。 接下来,你需要进行以下设置以配置串口: 1.使能USART外设的时钟。在RCC寄存器中,设置相应的USART外设时钟使能位(如RCC_APB2Periph_USART1)。 2.配置GPIO引脚的模式和速率。使用GPIO_InitTypeDef结构设置GPIO引脚的模式为复用推挽输出,并设置输出速率为50MHz。 3.配置USART外设。使用USART_InitTypeDef结构配置USART外设的波特率、字长、停止位等参数。 4.使能USART外设。调用USART_Cmd函数使能USART外设。 下面是示例代码: ```c #include "stm32f10x.h" GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; void USART_Configuration(void) { // 使能USART1外设的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 配置USART1的GPIO引脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置USART1的TX引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置USART1的RX引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置USART1外设 USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); // 使能USART1外设 USART_Cmd(USART1, ENABLE); } ``` 以上代码将USART1配置为串口模式,使用GPIOA的引脚9作为RX引脚,引脚10作为TX引脚,并将波特率设置为9600。 请注意,以上代码仅供参考,你需要根据实际需求进行修改。确保正确连接硬件并根据你的需要调整引脚和参数设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值