正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-19讲 串口实验UART

前言:

本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。

引用:

正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com

《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》

正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档

正文:

本文是 “正点原子[第二期]Linux之ARM(MX6U)裸机篇--第19 讲” 的读书笔记。第19讲主要是介绍I.MX6U处理器的UART串口并实现串口UART的字符格式化打印实验。本节将参考正点原子的视频教程第18讲和配套的正点原子开发指南文档进行学习。

0. 概述

不管是单片起开发还是嵌入式Linux开发,串口都是最常用到的外设。可以通过串口将开发板与电脑相连,然后电脑上通过串口调试助手来调试程序。还有很多的模块,比如蓝牙,GPS,GPRS 等都使用的串口来与主控进行通信的,在嵌入式LInux中一般使用串口作为控制台,所以掌握串口是必备的技能。本章我们就来学习如何驱动 I.MX6U 上的串口,并使用串口和电脑进行通信。

1. I.MX6U 串口简介

1.1 UART简介

1. UAR通信格式

串口的全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。串口通信距离远,但是速度相对会低,串口是一种很常用的工业接口。I.MX6u 自带的UART外设就是串口的一种,UART的全称是 Universal Asynchronous Receiver/Transimitter ,也就是异步串行收发器。既然有异步串行收发器,那肯定也有同步串行收发器,学过STM32的同学应该知道,STM32除了UART(Univeral Asynchronous Receiver/Transmitter)外,还另外有一个叫做USART的东西。USART的全称是 Universal Synchronous/Asynchronous Receiver/Transmitter,也就是异步/同步串行收发器。想不UART多了一个同步功能,在硬件上体现出来就是多了一条时钟线。一般USART是可以作为 UART使用的,也就是不使用其同步功能。

UART作为串口的一种,器工作原理也是将数据一位一位的的进行传输,发送和接受各使用一条线,因此通过UART接口与外界通信最少需要三条线:TXD(发送),RXD(接收)和GND(地线)。图21.1.1.1 就是UART通信的格式:

图 21.1.1.1 中各位的含义如下:
 

描述
空闲位数据线在空闲状态的时候逻辑为“1”状态,也就是高电平表示,表示没有数据,数据线空闲没有数据传输。
起始位当要传输数据的时候线传输一个逻辑“0”,也就是将数据线拉低,表示开始数据传输。
数据位数据位就是实际要传输的数据,数据位数可选择5~8位,我们一般都是按照字节传输数据的,一个自己8位,因此数据位通常是8位的。低位在前,先传输,高位最后传输。
奇偶校验位这是对数据中“1”的位数进行奇偶校验用的,可以不使用奇偶校验功能。
停止位数据传输完成的标志位,停止位的位数可以选择1位,1.5位,或2位高电平,一般都选择1位停止位。
波特率波特率就是UART数据传输的速率,也就是每秒传输的数据位数,一般选择9600, 19200, 115200 等。

2. UART的电平标准

UART一般的接口电平有TTL和RS-232,一般开发板上都有TXD和RXD这样的引脚,这些引脚低电平表示逻辑0,高电平表示逻辑1,这个就是TTL电平。RS-232采用差分线,-3~-15V 表示逻辑1,+3~+15V 表示逻辑0。一般21.1.1.2 中的接口就是TTL电平。

图 21.1.1.2 中的模块就是 USB 转 TTL 模块,TTL接口的部分有VCC,GND,RXD,TXD,RTS和CTS。RTS和CTS基本用不到,使用的时候通过杜邦线和其他模块的TTL接口相连即可。

RS-232电平需要使用DB-9接口,I.MX6U-ALPHA 开发板上的COM3(UART3)接口就是RS-232接口的,如图 21.1.1.3 所示:

由于现在的电脑都没有DB9接口了,取而代之的是USB接口,所以就催生了很多USB转串口TTL芯片,比如CH340,PL2302等。通过这些芯片就可以实现串口TTL转USB。I.MX6U-APLHA开发板就是用了CH340芯片来来完成UART1和电脑之间的连接,只需要一条USB线即可,如图 21.1.1.4 所示。

2. I.MX6U UART 简介

上一小节介绍了UART接口,本小节具体看一下I.MX6U的UART接口,I.MX6U 一共有8个UART,其主要特性如下:

  1. 兼容 TIA/EIA-232F 标准,速度最高可到 5Mbit/S。
  2. 支持串行 IR 接口,兼容 IrDA,最高可到 115.2Kbit/s。
  3. 支持 9 位或者多节点模式(RS-485)。
  4.  1 或 2 位停止位。
  5. 可编程的奇偶校验(奇校验和偶校验)。
  6. 自动波特率检测(最高支持 115.2Kbit/S)

I.MX6U 的UART功能很多,但是我们本章就只是用到最基本的串口功能,关于 UART 其它功能的介绍请参考《I.MX6ULL 参考手册》第 3561 页的“Chapter 55 Universal Asynchronous Receiver/Transmitter(UART)”章节。
 

UART的时钟源石油寄存器CCM_CSCDR1的 UART_CLK_DEL(bit) 位来选择的,当为0的时候UART的时钟源为 pll3_80m(80MHz),如果为 1 的时候 UART 的时钟源为 osc_clk(24M),一般选择 pll3_80m 作为 UART 的时钟源。

CCM_CSCDR1的UART_CLK_PODF(bit5:0)为是UART的时钟分频值,可设置0~63,分别对应1~64分频,因此最终进入UART的时钟为 80MHz = PLL3 480MHz/6。

80MHz = PLL3 480MHz/6

2.1 UARTx_UCRx 寄存器

接下来看一下UART的几个重要的寄存器,第一个就是UART的控制寄存器去,寄UART1_UCR1(x=1~8),此寄存器的结构如下图所示:

描述
ADBR(bit14)
 
自动波特率检测使能位,为 0 的时候关闭自动波特率检测,为1 的时候使能自动波特率检测。
UARTEN(bit0)UART 使能位,为 0 的时候关闭 UART,为 1 的时候使能 UART
 

接下俩看一下UART的控制寄存器2,即 UARTx_UCR2,此寄存器的结构如图 21.1.2.2 所
示:

描述
IRTS bit[14]为0的时候使能RTS引脚,为1的时候忽略RTS引脚
PREN bit[8]Parity Check 奇偶校验使能位,为0的时候关闭奇偶校验,为1的时候使能机构校验。Odd Number 奇数,Even Numver 偶数。
PROE bit[7]奇偶校验模式选择位,开启奇偶校验以后此位如果为 0 的话就使用偶校验,此位为 1 的话就使能奇校验
STPB bit[6]Stop Bit 停止位数量,为 0 的话 1 位停止位,为 1 的话 2 位停止位
WS bit[5]数据位长度,为 0 的时候选择 7 位数据位,为 1 的时候选择 8 位数据位
 
TXEN bit[2]发送使能位,为0的时候关闭UART的发送功能,为1的时候打开UART的发送功能。
RXEN bit[1]接收使能位,为0的时候关闭UART的接收功能,为1的时候打开UART的接收功能。
SRST bit[0]软件复位,为0的时候软件复位UART,为1的时候表示软件复位完成。复位万策划给你以后此位会自动置1,表示复位万策划给你。此位只能写0,写1会被忽略掉。

接下来看一下 UARTx_UCR3 寄存器,此寄存器结构如图 21.1.2.3 所示


本章实验就用到了寄存器 UARTx_UCR3 中的位 RXDMUXSEL(bit2),这个位应该始终为 1,这个在《I.MX6ULL 参考手册》第 3624 页有说明。

这个正点原子的视频教程里有说,当时正点原子的左盟主在准备I.MX6U UART 视频教程备课的时候写的源码这里没有置1,找了很久才找到是这里UARTx_UCR3 这个寄存器这里RXDMUXSEL 位没有置1的原因。这里是经验教训。

接下来看一下寄存器 UARTx_USR2,这个是 UART 的状态寄存器 2,此寄存器结构如图21.1.2.4 所示

寄存器 UARTx_USR2 用到的重要位如下:

  • TXDC(bit3):发送完成标志位,为 1 的时候表明发送缓冲(TxFIFO)和移位寄存器为空,也就是发送完成,向 TxFIFO 写入数据此位就会自动清零。
  • RDR(bit0):数据接收标志位,为 1 的时候表明至少接收到一个数据,从寄存器UARTx_URXD 读取数据接收到的数据以后此位会自动清零。
     

2.2 UART 分频值寄存器

接 下 来 看 一 下 寄 存 器 UARTx_UFCR 、 UARTx_UBIR 和 UARTx_UBMR , 寄 存 器
UARTx_UFCR 中我们要用到的是位 RFDIV(bit9:7),用来设置参考时钟分频,设置如表 21.1.2.1
所示:

  • Ref Freq:经过分频以后进入 UART 的最终时钟频率。
  • UBMR:寄存器 UARTx_UBMR 中的值。
  • UBIR:寄存器 UARTx_UBIR 中的值。

通过 UARTx_UFCR 的 RFDIV 位、 UARTx_UBMR 和 UARTx_UBIR 这三者的配合即可得到我们想要的波特率。比如现在要设置 UART 波特率为 115200,那么可以设置 RFDIV 为
5(0b101),也就是 1 分频,因此 Ref Freq=80MHz。设置 UBIR=71, UBMR=3124,根据上面的公式可以得到:

2.3 UART的 RXD 和TXD寄存器去

最后来看一下寄存器 UARTx_URXD 和 UARTx_UTXD,这两个寄存器分别为 UART 的接收和发送数据寄存器,这两个寄存器的低八位为接收到的和要发送的数据。读取寄存器UARTx_URXD 即可获取到接收到的数据,如果要通过UART发送数据,直接将数据写入到寄存器UARTx_UTXD 即可。

注意:

从I.MX6U UART 寄存器的的UARTx_URXD和UARTx_UTXD寄存器里读取和发送数据的时候,需要检查 UARTx_USR2 寄存器里的 TXDC (Transmit Data Complete)和 RDR (Receiver Data Ready) 标志位,检查到标志位为1说明发送完成或者接收数据准备好,才可以读取/写入。


关于 UART 的寄存器就介绍到这里,关于这些寄存器详细的描述,请参考《I.MX6ULL 参考手册》第 3608 页的 55.15 小节。

3. 编写UART驱动程序

本章我们使用 I.MX6U 的 UART1 来完成开发板与电脑串口调试助手之间串口通信, UART1 的配置步骤如下:

  1. 设置UART1的时钟源
    设置UART1的时钟源为 pll3_80m,设置寄存器 CCM_CSCDR1 的 UART_CLK_SEL 位为0即可。
  2. 初始化UART1
    初始化UART1所使用的IO,设置UART1的寄存器 UARTx_UCR1~UARTx_UCR3,设置内容包括波特率,奇偶校验位,停止位,数据位等等。
  3. 使能UART1
    UART1初始化完成以后就可以使能UART1了,设置寄存器UARTx_UCR1的为 UARTEN 为1。
  4. 编写UART1的数据收发函数
    编写两个用于UART1的数据收发操作。

3.1 硬件原理分析

本实验用到的资源如下:

  1. 一个LED灯:LED0
  2. 串口1

I.MX6U-ALPHA 开发板串口 1 硬件原理图如图 21.2.1 所示:

将串口 1 的 RXD、 TXD 两个引脚分别与 P116、 P117 连接一起,如图 21.2.2 所示

硬件连接设置好以后就可以开始软件编写了,本章实验我们初始化好 UART1,然后等待 SecureCRT  给开发板发送一个字节的数据,开发板接收到 SecureCRT 发送过来的数据以后在通过串口 1 发送给 SecureCRT。

3.2 UART IO引脚复用

查阅《I.MX6ULL 参考手册》3563页的“55.2 External Signals” 小节,可以看到I.MX6U芯片的UART1 引脚IO复用的方法。

I.MX6U 芯片的封装引脚复用 IOMUXC,UART1_TX 可以来自于两种的芯片引脚复用:

  • 一种是复用UART1_RX_DATA 的复用 ALT0
  • 另一种是复用 GPIO1_IO02 的复用 ALT

因为在I.MX6U 芯片的 GPIO1_IO03 在正点原子的 I.MX6ULL ALPHA/Mini 开发板上已经使用为LED0 的GPIO输出引脚,所以我们应该使用 UART1 的 UART1_RX_DATA 和 UART1_TX_DATA 引脚复用。 

对 IOMUXC_UART1_TX_DATA IO接口复用

4. 源码编写

bsp/bsp_uart.c 源码如下,参考了正点原子提供的示例源码:

#include "bsp_uart.h"
#include "bsp_beep.h"void uart_init(void)
{/* UART 时钟源选择 */CCM->CSCDR1 &= ~(1 << 6);		/* 选择pll3_80m作为时钟源 */CCM->CSCDR1 &= ~(0x3f << 0);	/* 选择1分频 */uart_disable(UART1);uart_io_int();					/* UART IO复用 */uart_reset();					/* UART 软件复位 *//* UARTx_UCR1 */UART1->UCR1 = 0;			/* 关闭UART1, 关闭UART1自动波特率检测 *//* UARTx_UCR2 */UART1->UCR2 &= ~(1 << 8);	/* Parity 奇偶校验不启用 */UART1->UCR2 &= ~(1 << 6);	/* StopBit 停止位,1个停止位 */UART1->UCR2 |= (1 << 14);UART1->UCR2 |= (1 << 5);	/* WordSize 字宽,8个数据位 */UART1->UCR2 |= (1 << 2);	/* TXEN 使能Tx */UART1->UCR2 |= (1 << 1);	/* RXEN 使能Rx *//* UARTx_UCR3 */UART1->UCR3 |= (1 << 2);	/* I.MX6ULL手册指出此位必须被设置为1 *//* UART波特率设置 */UART1->UFCR &= ~(7 << 7);UART1->UFCR |= (5 << 7);	/* 1分频 */UART1->UBIR |= (71 & 0xFFFF);UART1->UBMR |= (3124 & 0xFFFF);uart_enable(UART1);
}void uart_io_int(void)
{/* 0x10B0 = 0001 0000 1011 0000* bit[0]		SRE			0 低压摆率* bit[2:1]		Reserved	00 保留未使用* bit[5:3]		DSE			110 驱动能力DSE_6_R0_6 — R0/6* bit[7:6]		SPEED		10  medium(100MHz)* bit[10:8]	Reserved	000 保留未使用* bit[11]		ODE			0 Open-Drain 开漏输出(推挽输出)* bit[12]		PKE			1 Pull/Keeper使能* bit[13]		PUE			0 Pull/Keeper Select 选择,0选择Keeper* bit[15:14]	PUS			00 Pull UP/Down Config, 00选择100K Ohm Pull Down*//* UART1_TX_DATA IO复用 */IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0);IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0);/* UART1_RX_DATA IO复用 */IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0);IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0);
}void uart_enable(UART_Type *base)
{base->UCR1 |= (1 << 0);
}void uart_disable(UART_Type *base)
{base->UCR1 &= ~(1 << 0);
}unsigned char getc(void)
{unsigned char c;while((UART1->USR2 & (1 << 0)) == 0);	/* 检查UART RDR标志位,确认Rx是否完成 */c = (UART1->URXD & 0xFF);return c;
}void putc(unsigned char c)
{/* 检查UART TXDC标志位,确认Tx是否完成 */while((UART1->USR2 & (1 << 3)) == 0);UART1->UTXD = (c & 0xFF);
}void puts(char *str)
{char *p = str;while(*p){putc(*p++);}
}void uart_reset(void)
{UART1->UCR2 &= ~(1 << 0);				/* UART 软件复位 */while((UART1->UCR2 & (1<< 0)) == 0);	/* 等待UART软件复位完成 */
}

4.1 编译并修改Makefile

执行‘make’命令编译时,编译器提示如下错误:

编译器提示错误的是因为在GCC编译器里有内置的(build-in)的 'putc()' 和 'puts()' 函数和我们自己的uart 驱动程序源码里定义的 'putc', 'puts' 函数冲突。所以修改Makefile编译命令,对 “*.c” 文件的编译增加 "-no-buildin" 编译选项。

5. 编译烧写SD卡验证实验结果


译修改主频后源码烧录SD卡验证本节的 I.MX6U UART串口实验。预期烧录SD卡后正点原子I.MX6ULL ALPHA/Mini 开发板后,UART串口可以在串口工具,如SecureCRT或者Xshell上打印字符串输出。

我本地验证的结果是基于GPT定时器的高精度延时实验结果正常,UART串口可以在串口工具XShell上打印字符串。

6. 总结和实验遇到的问题记录

6.1 问题1:烧录UART.bin镜像上电启动之后,执行到某个函数卡死

错误原因是寄存器写错了,软件复位应该是UCR1,错误的写成了USR1。修复之后就可以了。

6.2 问题2:烧录UART.bin镜像上电启动之后,串口没有输出。

问题2错误原因,是这里错写成和0x0F进行与运算,这样打印出来的字符就只有低4位有效。正确的应该是和0xFF进行与运算,因为是最后的低8位有效。修复之后串口就可以正常打印字符串了。

6.3 问题3:需要在UARTx->UCR2 中配置bit 14 忽略 "RTS pin" 引脚

需要在UARTx->UCR2 中配置bit 14 忽略 "RTS pin" 引脚。

如果UART不忽略 RTS (Reqeust To Send pin 引脚信号),那么UART的 tx 方向在收到 RTS pin (电平有效)信号之前不会发送数据。对于我们的这个UART实验也就是卡在 uart tx 发送数据的地方。 

7. 附加信息:UART RTS和CTS

参考如下链接介绍了UART 的 RTS 引脚和 CTS引脚的作用:

RTSRequest To Send
CTSClear To Send

串口流控 UART 中 CTS RTS RX TX (串口模组和MCU直接的通信)_cts low to txd valid-CSDN博客文章浏览阅读1.6w次,点赞11次,收藏66次。硬件介绍:_cts low to txd validhttps://blog.csdn.net/EAyayaya/article/details/112801769

RTS:(Request To Send 请求发送)

模组的RTS是给mcu说准备好了,低电平,如果模组没有准备好,MCU给模组发数据,可能会丢包 

CTS:(Clear To Send 清除发送,允许发送)

模组的cts必须要外部的mcu给低电平,模组才能发送数据, 

 RXD: (Receive Data 接收数据)

接收数据

TXD:( Transmit Data 发送数据)

发送数据 

8. 结束

本文至此结束。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/329026.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式硬件中PCB走线与过孔的电流承载能力分析

简介 使用FR4敷铜板PCBA上各个器件之间的电气连接是通过其各层敷着的铜箔走线和过孔来实现的。 由于不同产品、不同模块电流大小不同,为实现各个功能,设计人员需要知道所设计的走线和过孔能否承载相应的电流,以实现产品的功能,防止过流时产品烧毁。 文中介绍设计和测试FR4敷…

Windows系统安装OpenSSH使用VScode远程连接内网Linux服务器开发

文章目录 &#x1f4a1;推荐 前言1、安装OpenSSH2、VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网…

Nginx/阿里云/二级域名的配置和使用

阿里云域名解析配置如下&#xff1a; nginx配置如下&#xff1a; 访问地址&#xff1a; zhadmin.iotzzh.com image.png

Hotcoin Research | 市场洞察:2024年5月13日-5月19日

加密货币市场表现 目前&#xff0c;加密货币总市值为1.32万亿&#xff0c;BTC占比54.41%。 本周行情呈现震荡上行的态势&#xff0c;BTC在5月15日-16日&#xff0c;有一波大的拉升&#xff0c;周末为震荡行情。BTC现价为67125美元。 上涨的主要原因&#xff1a;美国4月CPI为3…

深度学习之基于YoloV5钢材微小缺陷检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与目标 在钢材生产过程中&#xff0c;由于各种因素&#xff0c;钢材表面可能会出现微小缺陷&#xff…

C# OpenCvSharp 模拟生成车辆运行视频

C# OpenCvSharp 模拟生成车辆运行视频 目录 效果 项目 代码 下载 效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; namespace OpenCvSharp_Demo { p…

海外云手机的运作原理和适用场景

海外云手机是一种基于云计算技术的虚拟手机服务&#xff0c;通过将手机操作系统和应用程序托管在远程服务器上&#xff0c;实现用户可以通过互联网连接来使用和管理手机功能&#xff0c;而无需实际拥有物理手机。以下是有关海外云手机的相关信息&#xff1a; 海外云手机的运作原…

树莓派3B+入门(无外设)

昨日刚到一块树莓派3B&#xff0c;甚是喜爱&#xff0c;然半宿未眠 1、下载 在官网先下载烧录文件https://www.raspberrypi.com/software/ 下载完毕打开&#xff0c;选择&#xff0c;根据自己板子型号定 操作系统用最新的就行&#xff0c;64位不太稳定 储存卡&#xff0c;需…

超声波清洗机哪家好一点?四款超一流超声波清洗机大盘点

在追求极致清洁和维护精密工具、设备及珍贵物品的时代&#xff0c;超声波清洗机显得尤为重要。不仅因其高效、快速的清洁效果&#xff0c;更因其能够触及传统手工清洁所不能及的微小缝隙。无论你是珠宝设计师、机械工程师、还是热爱生活的普通家庭用户&#xff0c;超声波清洗机…

C语言例题43、打印倒立金字塔

#include <stdio.h>void main() {int i, j;for (i 5; i > 0; i--) {for (j 5; j > i; j--) {//输出空格printf(" ");}for (j 2 * i; j > 1; j--) {//输出星号printf("* ");}printf("\n");} }运行结果&#xff1a; 本章C语言…

【高阶数据结构(四)】图的最短路径问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:高阶数据结构专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多数据结构   &#x1f51d;&#x1f51d; 高阶数据结构 1. 前言2. 单源最短…

基于springboot实现大学生就业需求分析系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现大学生就业需求分析系统演示 摘要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲…

移动端适配(rem,vw)+响应式布局

1.1视口标签&#xff08;逻辑分辨率和设备匹配&#xff09; 1.2二倍图&#xff08;防止失真&#xff09; 二、适配方案 一、rem 1.1媒体查询 1.2、引入js文件&#xff08;remflexble.js&#xff09; 1.2、less Less 是一种动态样式语言&#xff0c;它扩展了 CSS 的功能&#…

sklearn之线性回归——以上证红利指数为例

文章目录 线性回归概念使用sklearn实现上证中立指数预测内置数据集的加载与处理 外部数据集的加载和处理数据内容数据加载和处理 开始预测分割数据集导入线性回归模型查看线性回归模型的系数绘制预测结果预测效果评估 最终代码 线性回归 线性回归&#xff08;Linear Regressio…

大数据比赛-环境搭建(二)

一、ubuntu安装google 1、下载google的Linux安装版 链接&#xff1a;https://pan.baidu.com/s/1w4Hsa1wbJDfC95fX2vU_1A 提取码&#xff1a;xms6 或者&#xff1a;Google Chrome 64bit Linux版_chrome浏览器,chrome插件,谷歌浏览器下载,谈笑有鸿儒 (chromedownloads.net) …

AI办公自动化:用kimi批量把word转换成txt文本

在Kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\aword 读取里面docx格式的word文档&#xff0c; 提取word文档中的第一行文字作为txt文本文档的标题…

【Python】使用requests采集数据存入mysql或文件

一、什么是requests requests包是一个使用Python编写的HTTP请求库&#xff0c;使得发送HTTP请求和处理HTTP响应变得更加简单。以下是对requests包的详细介绍&#xff1a; 用途&#xff1a; requests包主要用于与HTTP交互&#xff0c;能够发送HTTP请求和处理HTTP响应。它支持处…

软考--试题六--抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory) 意图 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定他们具体的类 结构 适用性 1、一个系统要独立于它的产品的创建、组合和表示时 2、一个系统要由多个产品系统中的一个来配置时 3、当要强调一系列相关的产品对象的设…

【Linux系统编程】第十九弹---进程状态(下)

​​​​​​​ ✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、僵尸进程 2、孤儿进程 3、运行状态 4、阻塞状态 5、挂起状态 6、进程切换 总结 1、僵尸进程 上一弹…

普通人也能创业!轻资产短视频带货项目,引领普通人实现创业梦想

在这个信息爆炸的时代&#xff0c;创业似乎成为了越来越多人的梦想。然而&#xff0c;传统的创业模式 keJ0277 往往伴随着高昂的资金投入和复杂的管理流程&#xff0c;让许多普通人望而却步。然而&#xff0c;现在有一种轻资产短视频带货项目正在悄然兴起&#xff0c;它以其低…