第41章 RS-485通讯实验—零死角玩转STM32-F429系列

FreeRTOS Usart应用之Modbus接收测试 freeRtos 任务实现modbus接收超时测试,未经事件信号处理 阅读详情
 

第41章     RS-485通讯实验

全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn

野火视频教程优酷观看网址:http://i.youku.com/firege

 

 

 

本章参考资料:《STM32F4xx中文参考手册》USART章节。

学习本章时,配合本书前面的《USART—串口通讯》及《CAN—通讯实验》章节进行对比学习,效果更佳。

关于实验板中使用的MAX485收发器资料可查阅《MAX485》规格书了解。

41.1 RS-485通讯协议简介

与CAN类似,RS-485是一种工业控制环境中常用的通讯协议,它具有抗干扰能力强、传输距离远的特点。RS-485通讯协议由RS-232协议改进而来,协议层不变,只是改进了物理层,因而保留了串口通讯协议应用简单的特点。

41.1.1 RS-485的物理层

从《CAN—通讯实验》章节中了解到,差分信号线具有很强的干扰能力,特别适合应用于电磁环境复杂的工业控制环境中,RS-485协议主要是把RS-232的信号改进成差分信号,从而大大提高了抗干扰特性,它的通讯网络示意图见图 411。

图 411 RS-485通讯网络示意图

对比CAN通讯网络,可发现它们的网络结构组成是类似的,每个节点都是由一个通讯控制器和一个收发器组成,在RS-485通讯网络中,节点中的串口控制器使用RX与TX信号线连接到收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用TTL信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的TX信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成TTL信号通过RX引脚传输到串口控制器中。

RS-485通讯网络的最大传输距离可达1200米,总线上可挂载128个通讯节点,而由于RS-485网络只有一对差分信号线,它使用差分信号来表达逻辑,当AB两线间的电压差为-6V~-2V时表示逻辑1,当电压差为+2V~+6V表示逻辑0,在同一时刻只能表达一个信号,所以它的通讯是半双工形式的,它与RS-232通讯协议的特性对比见图 411。

表 411 RS-232/422/485 标准对比

通讯标准

信号线

通讯方向

电平标准

通讯距离

通讯节点数

RS232

单端TXD、RXD、GND

全双工

逻辑1:-15V~-3V

逻辑0:+3V~+15V

100米以内

只有两个节点

RS485

差分线AB

半双工

逻辑1:-6V~-2V

逻辑0:+2V~+6V

1200米

支持多个节点。支持多个主设备,任意节点间可互相通讯

RS-485与RS-232的差异只体现在物理层上,它们的协议层是相同的,也是使用串口数据包的形式传输数据。而由于RS-485具有强大的组网功能,人们在基础协议之上还制定了MODBUS协议,被广泛应用在工业控制网络中。此处说的基础协议是指前面串口章节中讲解的,仅封装了基本数据包格式的协议(基于数据位),而MODBUS协议是使用基本数据包组合成通讯帧格式的高层应用协议(基于数据包或字节)。感兴趣的读者可查找MODBUS协议的相关资料了解。

由于RS-485与RS-232的协议层没有区别,进行通讯时,我们同样是使用STM32的USART外设作为通讯节点中的串口控制器,再外接一个RS-485收发器芯片把USART外设的TTL电平信号转化成RS-485的差分信号即可。

41.2 RS-485—双机通讯实验

本小节演示如何使用STM32的USART控制器与MAX485收发器,在两个设备之间使用RS-485协议进行通讯,本实验中使用了两个实验板,无法像CAN实验那样使用回环测试(把STM32 USART外设的TXD引脚使用杜邦线连接到RXD引脚可进行自收发测试,不过这样的通讯不经过RS-485收发器,跟普通TTL串口实验没有区别),本教程主要以"USART—485通讯"工程进行讲解。

41.2.1 硬件设计

图 412 双CAN通讯实验硬件连接图

图 4016中的是两个实验板的硬件连接。在单个实验板中,作为串口控制器的STM32从USART外设引出TX和RX两个引脚与RS-485收发器MAX485相连,收发器使用它的A和B引脚连接到RS-485总线网络中。为了方便使用,我们每个实验板引出的A和B之间都连接了1个120欧的电阻作为RS-485总线的端电阻,所以要注意如果您要把实验板作为一个普通节点连接到现有的RS-485总线时,是不应添加该电阻的!

由于485只能以半双工的形式工作,所以需要切换状态,MAX485芯片中有"RE"和"DE"两个引脚,用于控制485芯片的收发工作状态的,当RE引脚为低电平时,485芯片处于接收状态,当DE引脚为高电平时芯片处于发送状态。实验板中使用了STM32的PD11直接连接到这两个引脚上,所以通过控制PD11的输出电平即可控制485的收发状态。

要注意的是,由于我们的实验板485使用的信号线与液晶屏共用了,为防止干扰,平时我们默认是不给485收发器供电的,使用485的时候一定要把485接线端子旁边的"C/4-5V"排针使用跳线帽与"5V"排针连接起来进行供电,并且把液晶屏从板子上拔下来;而又由于实验板的RS-232与RS-485通讯实验都使用STM32的同一个USART外设及收发引脚,实验时注意必须要把STM32的"PD5引脚"与MAX485的"485_D"及"PD6"与"485_R"使用跳线帽连接起来(这些信号都在485接线端子旁边的排针上)。

要实现通讯,我们还要使用导线把实验板引出的A和B两条总线连接起来,才能构成完整的网络。实验板之间A与A连接,B与B连接即可。

41.2.2 软件设计

为了使工程更加有条理,我们把RS485控制相关的代码独立分开存储,方便以后移植。在"串口实验"之上新建"bsp_485.c"及"bsp_485.h"文件,这些文件也可根据您的喜好命名,它们不属于STM32标准库的内容,是由我们自己根据应用需要编写的。这个实验的底层STM32驱动与串口控制区别不大,上层实验功能上与CAN实验类似。

1.    编程要点

(1)    初始化485通讯使用的USART外设及相关引脚;

(2)    编写控制MAX485芯片进行收发数据的函数;

(3)    编写测试程序,收发数据。

2.    代码分析
485硬件相关宏定义

我们把485硬件相关的配置都以宏的形式定义到"bsp_485.h"文件中,见代码清单 242。

代码清单 411 485硬件配置相关的宏(bsp_485.h文件)

1 /*USART号、时钟、波特率*/

2 #define RS485_USART USART2

3 #define RS485_USART_CLK RCC_APB1Periph_USART2

4 #define RS485_USART_BAUDRATE 115200

5

6 /*RX引脚*/

7 #define RS485_USART_RX_GPIO_PORT GPIOD

8 #define RS485_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOD

9 #define RS485_USART_RX_PIN GPIO_Pin_6

10 #define RS485_USART_RX_AF GPIO_AF_USART2

11 #define RS485_USART_RX_SOURCE GPIO_PinSource6

12

13 /*TX引脚*/

14 #define RS485_USART_TX_GPIO_PORT GPIOD

15 #define RS485_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOD

16 #define RS485_USART_TX_PIN GPIO_Pin_5

17 #define RS485_USART_TX_AF GPIO_AF_USART2

18 #define RS485_USART_TX_SOURCE GPIO_PinSource5

19

20 /*485收发控制引脚*/

21 #define RS485_RE_GPIO_PORT GPIOD

22 #define RS485_RE_GPIO_CLK RCC_AHB1Periph_GPIOD

23 #define RS485_RE_PIN GPIO_Pin_11

24

25 /*中断相关*/

26 #define RS485_INT_IRQ USART2_IRQn

27 #define RS485_IRQHandler USART2_IRQHandler

以上代码根据硬件连接,把与485通讯使用的USART外设号、引脚号、引脚源以及复用功能映射都以宏封装起来,并且定义了接收中断的中断向量和中断服务函数,我们通过中断来获知接收数据。

初始化485的USART配置

利用上面的宏,编写485的USART初始化函数,见代码清单 243。

代码清单 412 RS485的初始化函数(bsp_485.c文件)

1

2 /*

3 * 函数名:RS485_Config

4 * 描述:USART GPIO 配置,工作模式配置

5 * 输入:无

6 * 输出 : 无

7 * 调用:外部调用

8 */

9 void RS485_Config(void)

10 {

11 GPIO_InitTypeDef GPIO_InitStructure;

12 USART_InitTypeDef USART_InitStructure;

13

14 /* 配置 USART时钟 */

15 RCC_AHB1PeriphClockCmd(RS485_USART_RX_GPIO_CLK|

16 RS485_USART_TX_GPIO_CLK|

17 RS485_RE_GPIO_CLK, ENABLE);

18 RCC_APB1PeriphClockCmd(RS485_USART_CLK, ENABLE);

19

20 /* TX 引脚源*/

21 GPIO_PinAFConfig(RS485_USART_RX_GPIO_PORT,RS485_USART_RX_SOURCE, RS485_USART_RX_AF);

22

23 /* RX 引脚源*/

24 GPIO_PinAFConfig(RS485_USART_TX_GPIO_PORT,RS485_USART_TX_SOURCE,RS485_USART_TX_AF);

25

26 /* USART GPIO配置 */

27 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

28 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

29 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

30 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

31

32 /*TX*/

33 GPIO_InitStructure.GPIO_Pin = RS485_USART_TX_PIN;

34 GPIO_Init(RS485_USART_TX_GPIO_PORT, &GPIO_InitStructure);

35

36 /*RX */

37 GPIO_InitStructure.GPIO_Pin = RS485_USART_RX_PIN;

38 GPIO_Init(RS485_USART_RX_GPIO_PORT, &GPIO_InitStructure);

39

40 /* 485收发控制管脚 */

41 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

42 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

43 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

44 GPIO_InitStructure.GPIO_Pin = RS485_RE_PIN ;

45 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

46 GPIO_Init(RS485_RE_GPIO_PORT, &GPIO_InitStructure);

47

48 /* USART 模式配置*/

49 USART_InitStructure.USART_BaudRate = RS485_USART_BAUDRATE;

50 USART_InitStructure.USART_WordLength = USART_WordLength_8b;

51 USART_InitStructure.USART_StopBits = USART_StopBits_1;

52 USART_InitStructure.USART_Parity = USART_Parity_No ;

53 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

54 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

55

56 USART_Init(RS485_USART, &USART_InitStructure);

57 /*使能USART*/

58 USART_Cmd(RS485_USART, ENABLE);

59

60 /*配置中断优先级*/

61 NVIC_Configuration();

62 /* 使能串口接收中断 */

63 USART_ITConfig(RS485_USART, USART_IT_RXNE, ENABLE);

64

65 /*控制485芯片进入接收模式*/

66 GPIO_ResetBits(RS485_RE_GPIO_PORT,RS485_RE_PIN);

67 }

与所有使用到GPIO的外设一样,都要先把使用到的GPIO引脚模式初始化,配置好复用功能,其中用于控制MAX485芯片的收发状态的引脚被初始化成普通推挽输出模式,以便手动控制它的电平输出,切换状态。485使用到的USART也需要配置好波特率、有效字长、停止位及校验位等基本参数,在通讯中,两个485节点的串口参数应一致,否则会导致通讯解包错误。在实验中还使能了串口的接收中断功能,当检测到新的数据时,进入中断服务函数中获取数据。

使用中断接收数据

接下来我们编写在USART中断服务函数中接收数据的相关过程,见代码清单 244,其中的bsp_RS485_IRQHandler函数直接被bsp_stm32f4xx_it.c文件的USART中断服务函数调用,不在此列出。

代码清单 413 中断接收数据的过程(bsp_485.c文件)

1 //中断缓存串口数据

2 #define UART_BUFF_SIZE 1024

3 volatile uint16_t uart_p = 0;

4 uint8_t uart_buff[UART_BUFF_SIZE];

5

6 void bsp_RS485_IRQHandler(void)

7 {

8 if (uart_p<UART_BUFF_SIZE) {

9 if (USART_GetITStatus(RS485_USART, USART_IT_RXNE) != RESET) {

10 uart_buff[uart_p] = USART_ReceiveData(RS485_USART);

11 uart_p++;

12

13 USART_ClearITPendingBit(RS485_USART, USART_IT_RXNE);

14 }

15 } else {

16 USART_ClearITPendingBit(RS485_USART, USART_IT_RXNE);

17 }

18 }

19

20 //获取接收到的数据和长度

21 char *get_rebuff(uint16_t *len)

22 {

23 *len = uart_p;

24 return (char *)&uart_buff;

25 }

26

27 //清空缓冲区

28 void clean_rebuff(void)

29 {

30 uint16_t i=UART_BUFF_SIZE+1;

31 uart_p = 0;

32 while (i)

33 uart_buff[--i]=0;

34 }

这个数据接收过程主要思路是使用了接收缓冲区,当USART有新的数据引起中断时,调用库函数USART_ReceiveData把新数据读取到缓冲区数组uart_buff中,其中get_rebuff函数可以用于获缓冲区中有效数据的长度,而clean_rebuff函数可以用于对缓冲区整体清0,这些函数配合使用,实现了简单的串口接收缓冲机制。这部分串口数据接收的过程跟485收发器无关,是串口协议通用的。

切换收发状态

在前面我们了解到RS-485是半双工通讯协议,发送数据和接收数据需要分时进行,所以需要经常切换收发状态。而MAX485收发器根据其"RE"和"DE"引脚的外部电平信号切换收发状态,所以控制与其相连的STM32普通IO电平即可控制收尾,为简便起见,我们把收发状态切换定义成了宏,见代码清单 245。

代码清单 414 切换收发状态(bsp_485.h文件)

1 /// 简单的延时

2 static void RS485_delay(__IO u32 nCount)

3 {

4 for (; nCount != 0; nCount--);

5 }

6

7 /*控制收发引脚*/

8 //进入接收模式,必须要有延时等待485处理完数据

9 #define RS485_RX_EN() RS485_delay(1000);\

10     GPIO_ResetBits(RS485_RE_GPIO_PORT,RS485_RE_PIN); \

11 RS485_delay(1000);

12 //进入发送模式,必须要有延时等待485处理完数据

13 #define RS485_TX_EN() RS485_delay(1000); \

14 GPIO_SetBits(RS485_RE_GPIO_PORT,RS485_RE_PIN);\

15 RS485_delay(1000);

16

这两个宏中,主要是在控制电平输出前后加了一小段时间延时,这是为了给MAX485芯片预留响应时间,因为STM32的引脚状态电平变换后,MAX485芯片可能存在响应延时。例如,当STM32控制自己的引脚电平输出高电平(控制成发送状态),然后立即通过TX信号线发送数据给MAX485芯片,而MAX485芯片由于状态不能马上切换,会导致丢失了部分STM32传送过来的数据,造成错误。

发送数据

STM32使用485发送数据的过程也与普通的USART发送数据过程差不多,我们定义了一个RS485_SendByte函数来发送一个字节的数据内容,见代码清单 246。

代码清单 415 发送数据(bsp_485.c文件)

1

2 /***************** 发送一个字符 **********************/

3 //使用单字节数据发送前要使能发送引脚,发送后要使能接收引脚。

4 void RS485_SendByte( uint8_t ch )

5 {

6 /* 发送一个字节数据到USART1 */

7 USART_SendData(RS485_USART,ch);

8 /* 等待发送完毕 */

9 while (USART_GetFlagStatus(RS485_USART, USART_FLAG_TXE) == RESET);

10

11 }

12

上述代码中就是直接调用了STM32库函数USART_SendData把要发送的数据写入到USART的数据寄存器,然后检查标志位等待发送完成。

在调用RS485_SendByte 函数前,需要先使用前面提到的切换收发状态宏,把MAX485切换到发送模式,STM32发出的数据才能正常传输到485网络总线上,当发送完数据的时候,应重新把MAX485切换回接收模式,以便获取网络总线上的数据。

3.    main函数

最后我们来阅读main函数,了解整个通讯过程,见代码清单 2414。这个main函数的整体设计思路是,实验板检测自身的按键状态,若按键被按下,则通过485发送256个测试数据到网络总线上,若自身接收到总线上的256个数据,则把这些数据作为调试信息打印到电脑端。所以,如果把这样的程序分别应用到485总线上的两个通讯节点时,就可以通过按键控制互相发送数据了。

代码清单 416 main函数

1

2 /**

3 * @brief 主函数

4 * @param 无

5 * @retval 无

6 */

7 int main(void)

8 {

9

10 char *pbuf;

11 uint16_t len;

12

13 LED_GPIO_Config();

14

15 /*初始化USART1*/

16 Debug_USART_Config();

17

18 /*初始化485使用的串口,使用中断模式接收*/

19 RS485_Config();

20

21 LED_BLUE;

22

23 Key_GPIO_Config();

24

25 printf("\r\n欢迎使用秉火 STM32 F429 开发板。\r\n");

26 printf("\r\n秉火F429 485通讯实验例程\r\n");

27

28 printf("\r\n实验步骤:\r\n");

29

30 printf("\r\n 1.使用导线连接好两个485通讯设备\r\n");

31 printf("\r\n 2.使用跳线帽连接好:5v --- C/4-5V,485-D --- PD5,485-R ---PD6 \r\n");

32printf("\r\n 3.若使用两个秉火开发板进行实验,给两个开发板都下载本程序即可。\r\n");

33 printf("\r\n 4.准备好后,按下其中一个开发板的KEY1键,会使用485向外发送0-255的数字 \r\n");

34 printf("\r\n 5.若开发板的485接收到256个字节数据,会把数据以16进制形式打印出来。 \r\n");

35

36 while (1) {

37 /*按一次按键发送一次数据*/

38 if ( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON) {

39 uint16_t i;

40 LED_BLUE;

41         //切换到发送状态    

42 RS485_TX_EN();

43

44 for (i=0; i<=0xff; i++) {

45 RS485_SendByte(i); //发送数据

46 }

47

48 /*加短暂延时,保证485发送数据完毕*/

49 Delay(0xFFF);

50 RS485_RX_EN();//切换回接收状态

51

52 LED_GREEN;

53 printf("\r\n发送数据成功!\r\n"); //使用调试串口打印调试信息到终端

54

55 } else {

56 LED_BLUE;

57

58 pbuf = get_rebuff(&len);

59 if (len>=256) {

60 LED_GREEN;

61 printf("\r\n接收到长度为%d的数据\r\n",len);

62 RS485_DEBUG_ARRAY((uint8_t*)pbuf,len);

63 clean_rebuff();

64 }

65 }

66 }

67 }

在main函数中,首先初始化了LED、按键以及调试使用的串口,再调用前面分析的RS485_Config函数初始化了RS-485通讯使用的串口工作模式。

初始化后485就进入了接收模式,当接收到数据的时候会进入中断并把数据存储到接收缓冲数组中,我们在main函数的while循环中(else部分)调用get_rebuff来查看该缓冲区的状态,若接收到256个数据就把这些数据通过调试串口打印到电脑端,然后清空缓冲区。

在while循环中,还检测了按键的状态,若按键被按下,就把MAX485芯片切换到发送状态并调用RS485_SendByte函数发送测试数据0x00-0xFF,发送完毕后切换回接收状态以检测总线的数据。

41.2.3 下载验证

下载验证这个485通讯实验需要您有两个实验板,操作步骤如下:

(1)    按照"硬件设计"小节中的图例连接两个板子的485总线;

(2)    使用跳线帽连接 : 485_R<--->PD6、485_D<--->PD5、C/4-5V<--->5V ;

(3)    用USB线使实验板"USB TO UART"接口跟电脑连接起来,在电脑端打开串口调试助手,编译本章配套的程序,并给两个板子都下载该程序,然后复位。

(4)复位后在串口调试助手应看到485测试的调试信息,按一下其中一个实验板上的KEY1按键,另一个实验板会接收到报文,在串口调试助手可以看到相应的发送和接收的信息。

 

_FreeRTOS+RS485多机通信.rar 在STM32F429下移植了FreeRTOS与RS485,方便别人减少工作量,快速下载。并且集成多机通信。方便别人减少工作量,快速下载。 立即下载

相关推荐

FreeRTOS+RS485多机通信_freertos485_freertos485通讯_freertos_freertos+4

实现STM32F4 基于FreeRtos的多机485串口通讯

兄弟们,1024,懂得都懂。

许多人不明白为什么今天是程序员节,这里我给大家科普一下(虽然我朋友圈80%都是程序员):因为计算机的存储单位是满1024才进入下一个单位,就和我们十进制里满10进1一样,所以1024在程序员眼里是个特殊的数字,久而久之就演变为10月24为程序员节了。当所有人都认同这个节日时,才会成为真正的节日哦,所以各位同学朋友们,看我干啥?

qq_60614034的博客 5万+

数字IC物理验证实战 | 从Calibre LVS报告到Innovus定位的Debug全链路解析

本文详细解析了数字IC物理验证中Calibre LVS报告的Debug全流程,从INCORRECT NETS错误的初探到Innovus定位技巧,提供了实战案例和高效工具的使用方法。重点介绍了Calibre高亮功能、Innovus验证命令以及前后端工具联动的关键策略,帮助工程师快速定位和解决LVS问题,提升物理验证效率。

weixin_30919429的博客 127

【Python实战】用代码来访问1024网站

1024是一个好网站 首先,此次实战系列的前提是您能科学的找到1024网站!我这里并不提供网站地址,特此声明,这里只是用计算机科学的态度和方法,来分析一个问题。和1024网站没有任何关联。 在1024网站上,不知道你是否和我一样,平时爱逛技术讨论区,爱看一些每日资讯总结的帖子,那么会不会因为板块的主题帖子是按照回复时间排序而找不到自己喜欢看的帖子而心烦意乱呢?是不是为了找自己今天没看过的帖子,...

weixin_34417200的博客 2万+

MySQL连接异常:Communications link failure 解决方案

困扰一晚上的问题终于解决了。

weixin_44704776的博客 1085

Anaconda离线创建python环境

既然是离线创建python环境,就需要有一个已经创建好的python环境。所以我们有两台win10的机器,分别是A和B。两台机器都安装了anaconda。其中A可以连网,因此我们在A上创建好一个python2.7的环境py27,然后将py27移植(安装)到B上。B连不连网都无所谓。 一、机器上A上创建python2.7的环境py27 有两种方法: 方法1:使用Anaconda的图形界面。首先,点击Environments->Create,然后输入要创建的环境名称"py27",然后选择2.7,如图

FY_2018的博客 6787

配置vue项目启动后自动打开浏览器,出现网址跳转错误问题:网址为http://0.0.0.0:8080/ 的页面可能存在问题,或者已永久移动到新的网址。

配置vue项目启动后自动打开浏览器,出现网址跳转错误问题:网址为http://0.0.0.0:8080/ 的页面可能存在问题,或者已永久移动到新的网址。

m0_56588258的博客 6952

MATLAB安装配置libsvm(附MinGW64配置)

首先声明版本,本人PC系统Windows10 64bit,matlab安装的2016b,libsvm安装的version3.2.21.首先需要下载libsvm包:从林教授的网站上下载: http://www.csie.ntu.edu.tw/~cjlin/libsvm/2.将libsvm3.2.2解压到matlab/toolbox目录下:解压后:D:\matlab2016b\toolbox\libs...

github_35807147的博客 4万+

​​​资源分享 | 一、盘点高清壁纸网站​​

​​​资源分享 | 一、盘点高清壁纸网站​​​​​​​​​​ ​​1. wallroom​​ ​​​​2. 极简壁纸​​​ ​​​​3. 高清壁纸库​​ ​​​​4. 动漫图片和壁纸​​ ​​​​5. Wallpaper Abyss​​​​ 资源分享 | 一、盘点无版权图片网站 作者:1024导航 网址:​​https://1024.top​​ 备注:1024导航致力于收集高质量网站,内容持续更新中.... 本文内容,已收录至1024导航:​​https://shanhaigo.

liu_dongdong55的博客 1万+

1.为什么要学习MATLAB

学习MATLAB

FPGA/MATLAB学习教程/源码/项目合作开发 5806

Python 爬虫实战:全面解析雪球网用户投资组合数据采集

本文介绍了如何使用 Python 爬虫技术,抓取雪球网用户的投资组合信息。通过模拟登录、解析页面内容等步骤,获取了用户的持仓数据。未来,可以进一步探索以下方向:

2201_76125261的博客 1304

收藏的技术网址

zm博客 https://blog.youkuaiyun.com/weixin_38633659/article/details/90454311

YCXiang7s的博客 2947

2025年下半年网络规划设计师综合知识真题及答案解析

1983年,ARPANet完成技术转型,对此后的 Internet发展全关重要,这一转型是指( ) A.电路交换转向分组交换 B.商业化转型 C.民用化转型 D.从 NCP 协议转向 TCP/IP 答案:D 解析:ARPANet 最初使用 NCP (Network Control Protocol)协议进行主机问通信。1983年1月1日,ARPANet 正式切换到TCP/IP 协议族,为后续Internet的发展奠定了统一协议基础。

鹿鸣天涯 927

记录神奇的学习网址(未成年误入)

神奇的网址xuggle相关(操作视频) xuggle相关(操作视频) 官网:http://www.xuggle.com/downloads 辅助1:https://blog.youkuaiyun.com/hpb21/article/details/7943372

MYNAMEL的博客 6781

PCL 点云按强度渲染颜色【2025最新版】

点云按反射强度渲染颜色,博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 2万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

如何查看网址的ip地址

方法:进入cmd。

m0_63523451的博客 2603

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

2021 1024

节日快乐~

Welcome to my 优快云 blog 3万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

1024

1024

lajiyuan的博客 3万+

网址

http://blog.youkuaiyun.com/dux003/article/details/4237565

xiachunyu123的专栏 4023

一些好的学习网址

地址:http://chs.gotdotnet.com/quickstart/描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例程序,直接在网上查看此示例即看。****************************************************名称:微软官方.NET指导站点地址:http://www.gotdotnet.co

wangdequan1024的专栏 5700

纪念2019 1024

1024快乐!

鬼刀 1万+

史上最全网址导航大全,让世上没有找不到的好东西

收录的导航网址大全 好用和常用的网址几乎都在里面,个人喜欢往浏览器书签收藏夹里塞喜欢的干货和网站,以至于收藏夹里有着几千条网址,所以比较喜欢导航,但是浏览器原生自带的导航又太low,所以一般自己设置打开浏览器时即开的导航页便于工作和学习. 辛苦收集整理,喜欢给个赞哦???? 常用 导航名 地址 今日热榜 https://tophub.today 龙轩导航 http://ilxdh.c...

lzcsdn233的博客 31万+

https://vip.wubase.com/

一、服务须知 本平台加速技术只用于网上查询资料,跨区域注册,浏览健康视频等,拒绝用于公开发表政治,宗教言论,No zuo No die! 点此查看更多须知 二、使用方法 首页往下翻即可见针对各平台的使用说明,基本上照做即可,需要详细教程『尤其是IOS用户』请 点...

nmwhqjl的专栏 1万+
上一篇: 第42章 电源管理—实现低功耗—零死角玩转STM32-F429系列
下一篇: 第43章 RTC—实时时钟—零死角玩转STM32-F429系列
0木木0
博客等级 码龄17年 458粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值