前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >STM32F103GPIO-LED点灯

STM32F103GPIO-LED点灯

作者头像
韦东山
发布于 2022-05-05 09:35:04
发布于 2022-05-05 09:35:04
97700
代码可运行
举报
文章被收录于专栏:韦东山嵌入式韦东山嵌入式
运行总次数:0
代码可运行

8.1 关于GPIO

GPIO(General-Purpose IO ports,通用输入/输出接口),用于感知外界信号(输入模式)和控制外部设备(输出模式),如图 6.1.1 所示的STM32F103ZET6芯片四周的细引脚就是GPIO。

在嵌入式开发中,经常需要用到一些外部功能模块,比如LED、按键、蜂鸣器、温度传感器等,这些外设模块都比较简单,只需要MCU的GPIO与模块连接,控制引脚输出/读取高低电平即可。还有一些外部功能模块,需要多个引脚构成的“协议”进行通信,比如UART、I2C、SPI接口等。

如今的MCU大都采用引脚复用技术,即一个GPIO,即可以直接控制其输出高低电平,也可以设置为某个协议的引脚之一,比如I2C的时钟信号引脚SCK。此外,有些MCU的引脚,还能设置为ADC模式读取模拟信号,或者设置为DAC模式输出模拟信号,本章主要针对引脚的GPIO模式讲解。

对于GPIO模式,不同的MCU的功能细节略有差异,比如STM32的GPIO可以设置输出速度,51单片机就没有该功能。因此本章主要针对STM32的GPIO特性进行讲解,其它MCU大同小异,稍微类比一下也能很快上手。

8.1.1STM32的GPIO

GPIO(General-Purpose IO ports,通用输入/输出接口),用于感知外界信号(输入模式)和控制外部设备(输出模式),如图 6.1.1 所示的STM32F103ZET6芯片四周的细引脚就是GPIO。

在嵌入式开发中,经常需要用到一些外部功能模块,比如LED、按键、蜂鸣器、温度传感器等,这些外设模块都比较简单,只需要MCU的GPIO与模块连接,控制引脚输出/读取高低电平即可。还有一些外部功能模块,需要多个引脚构成的“协议”进行通信,比如UART、I2C、SPI接口等。

如今的MCU大都采用引脚复用技术,即一个GPIO,即可以直接控制其输出高低电平,也可以设置为某个协议的引脚之一,比如I2C的时钟信号引脚SCK。此外,有些MCU的引脚,还能设置为ADC模式读取模拟信号,或者设置为DAC模式输出模拟信号,本章主要针对引脚的GPIO模式讲解。

对于GPIO模式,不同的MCU的功能细节略有差异,比如STM32的GPIO可以设置输出速度,51单片机就没有该功能。因此本章主要针对STM32的GPIO特性进行讲解,其它MCU大同小异,稍微类比一下也能很快上手。

8.1.1STM32的GPIO

STM32F103ZET6一共有144个引脚,除去电源引脚、晶振时钟引脚、复位引脚、启动选择引脚、程序下载引脚(大部分为最小系统必须引脚),剩下的则是GPIO引脚。

STM32将这些众多按GPIOx(x为A、B、C等)分组,每组包含16个引脚,编号为0~15。STM32F103ZET6就有7组GPIO,每组16个引脚,即112个GPIO引脚。对于本开发板,读者可以通过《原理图》或表 3.4.1 查询每个引脚的用处,比如引脚名为PB0引脚,表示GPIOB组的0号引脚,在原理图的网络标识为LED_R,用于控制LED三色灯的红色控制引脚。

下图 8.1.1 为STM32F103系列GPIO的基本结构,左侧连接MCU内部,中间上半部分为输入,中间下半部分为输出,右侧为MCU引出的外设I/O引脚。

8.1.2 GPIO工作模式

STM32F103系列的I/O引脚共有8种工作模式,其中输出模式有四种:推挽输出、开漏输出、复用推挽输出、复用开漏输出;输入模式有四种:上拉输入、下拉输入、浮空输入、模拟输入。

1)推挽输出(Push-Pull,PP) 推挽结构由两个MOS管按互补对称的方式连接,任意时刻总是其中一个三极管导通,另一个三极管截止。如图 8.1.1 中①所示,内部由一个P-MOS管和一个N-MOS管组成,两个MOS管的栅极(Gate,G)接到了左侧“输出控制”,漏极(Drain,D)接到外部输出,P-MOS管的源极(Source,S)接到VDD(3.3V),N-MOS管的源极接到Vss(0V)。

MOS管作为开关使用,“输出控制”向两个MOS管栅极加一定电压,P-MOS管源极和漏极之间导通,VDD 经过P-MOS管的S->G->D输出,N-MOS管处于高阻态(电阻很大,近似开路),整体对外为高电平;“输出控制”取消向两个MOS管栅极施加电压,P-MOS管源极和栅极截止,P-MOS管处于高阻态,N-MOS管源极和漏极导通,整体对外为低电平。

推挽模式,让“输出控制”变为了VDD/Vss输出,使得输出电流增大,提高了输出引脚的驱动能力,提高了电路的负载能力和开关的动作速度。

2)开漏输出(Open-Drain,OD) 开漏模式下,“输出控制”不会控制P-MOS管,“输出控制”只会向N-MOS管栅极加一定电压,两个MOS管都处于截止状态,两个漏极处于悬空状态,称之为漏极开路。“输出控制”取消栅极的施加电压,P-MOS管依旧处于高阻态,N-MOS管导通,整体对外为低电平。

开漏输出模式可以等效将图 8.1.2 中灰色框的P-MOS管看作不存在。即该模式下只能输出低电平,若要输出高电平,则需要外接电阻,所接的电阻称为上拉电阻,此时输出电平取决于此时上拉电阻的外部电源电压情况,如图 8.1.2 中蓝色框的外部电路。

推挽输出模式可以直接输出高电平,开漏输出模式需要外接上拉电阻才能输出高电平,但开漏输出拥有一些推挽输出不具有的特性:

①利用外部电路驱动能力。如图 8.1.2 所示,“输出控制”只需要提供一个很小的栅极驱动电流,VCC经过上拉电阻为外部负载提高驱动电流;

②实现电平转换。推挽输出模式由VDD提供,即只能提供3.3V电平。使用开漏输出模式后,VCC可以为5V,从而实现了电平转换的效果。

③方便实现“逻辑与”功能。多个开漏的引脚可以直接并在一起使用,统一接一个合适的上拉电阻,就可以实现“逻辑与”关系,即当所有引脚均输出高电平时,输出才为高电平,若任一引脚输出低电平,则输出低电平。在I2C、SMBUS等总线电路中经常会用到。

3)复用功能推挽/开漏输出(Alternate Function,AF) GPIO引脚除了作为通用输入/输出引脚使用外,还可以作为片上外设(USART、I2C、SPI等)专用引脚,即一个引脚可以有多种用途,但同一时刻一个引脚只能使用复用功能中的一个。 当引脚设置为复用功能时,可选择复用推挽输出模式或复用开漏输出模式,在设置为复用开漏输出模式时,需要外接上拉电阻。

4)上拉输入模式(Input Pull-up) 如图 8.1.1 中②所示,VDD经过开关、上拉电阻,连接外部I/O引脚。当开关闭合,外部I/O无输入信号时,默认输入高电平。 该模式的典型应用就是外接按键,当没有按键按下时候,MCU的引脚为确定的高电平,当按键按下时候,引脚电平被拉为低电平。

5)下拉输入模式(Input Pull-down) 如图 8.1.1 中②所示,Vss经过开关、下拉电阻,连接外部I/O引脚。当开关闭合,外部I/O无输入信号时,默认输入低电平。

6)浮空输入模式(Floating Input) 如图 8.1.1 中②所示,两个上/下拉电阻开关均断开,既无上拉也无下拉,I/O引脚直接连接TTL肖特基触发器,此时I/O引脚浮空,读取的电平是不确定的,外部信号是什么电平,MCU引脚就输入什么电平。MCU复位上电后,默认为浮空输入模式。

7)模拟输入模式(Analog mode) 如图 8.1.1 中②所示,两个上/下拉电阻开关均断开,同时TTL肖特基触发器开关也断开,引脚信号直接连接模拟输入,实现对外部信号的采集。

8.1.3GPIO输出速度

STM32的I/O引脚工作再输出模式下时,需要配置I/O引脚的输出速度。该输出速度不是输出信号的速度,而是I/O口驱动电路的响应速度。

STM32提供三个输出速度:2MHz、10MHz、50MHz。实际开发中需要结合实际情况选择合适的相应速度,以兼顾信号的稳定性和低功耗。通常,当设置为高速时,功耗高、噪声大、电磁干扰强;当设备为低速时,功耗低、噪声小、电磁干扰弱。

通常简单外设,比如LED灯、蜂鸣器灯,建议使用2MHz的输出速度,而复用为I2C、SPI等通信信号引脚时,建议使用10MHz或50MHz以提高响应速度。

8.2硬件设计

LED(Light Emitting Diode,发光二极管),是一种能够将电能转化为可见光的半导体器件,当给P极施加正向电压后,空穴和自由电子在P-N结复合,辐射出光子而发光。如图 8.2.1 所示为目前市面常见的LED灯,第一个是插件LED灯,第二个是贴片LED灯,第三个是贴片三色LED灯,由三个红、绿、蓝小灯组成,后面可以通过PWM实验控制每个灯亮度,实现颜色组合,更具可玩性。

如图 8.2.2 所示为开发板三色LED灯部分的原理图,LED灯的正极直接连接了VDD_3V3,LED灯的负极分别连接了三个GPIO引脚,红色LED连接的PB0,绿色LED连接的PB1,蓝色LED连接的PB5,只需要控制PB0、PB1、PB5为相应低电平,即可点亮对应LED灯,输出为高电平时熄灭对应LED灯。

8.3软件设计

本节将会对软件设计中关键部分进行讲解,完整工程请参考本章配套工程。同时,为了方便移植与代码阅读,完整工程中将LED部分的驱动代码新建独立,源代码文件与头文件分别是“driver_led.c”,“driver_led.h”,保存在工程文件夹“Driver”中。

8.3.1软件设计思路

实验目的:体验嵌入式的“Hello Word”,点亮LED灯。 1)选择LED对应的GPIO; 2)使能所选择GPIO的时钟; 3)配置其为上拉输出模式; 4)控制其输出高或低来控制LED的亮与灭; 本实验配套代码位于“5_程序源码\2_GPIO—LED点灯”。

8.3.2软件设计讲解

1)GPIO选择与接口定义 宏定义GPIO接口的作用是,当实际设计中的LED对应的GPIO发生变化时,只需在宏定义处改变GPIO的值即可完成对整个LED设计的修改,这样就增强了可移植性。代码段 8.3.1 引脚宏定义(driver_led.h)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*********************
 * 引脚宏定义
**********************/
#define R_LED_GPIO_PIN        GPIO_PIN_0
#define R_LED_GPIO_PORT       GPIOB
#define R_LED_GPIO_CLK_EN()   __HAL_RCC_GPIOB_CLK_ENABLE()

#define G_LED_GPIO_PIN        GPIO_PIN_1
#define G_LED_GPIO_PORT       GPIOB
#define G_LED_GPIO_CLK_EN()   __HAL_RCC_GPIOB_CLK_ENABLE()

#define B_LED_GPIO_PIN        GPIO_PIN_5
#define B_LED_GPIO_PORT       GPIOB
#define B_LED_GPIO_CLK_EN()   __HAL_RCC_GPIOB_CLK_ENABLE()

根据原理图可知,RGB灯三色对应的引脚分别是:红灯-PB0、绿灯-PB1、蓝灯-PB5。因此得到代码段 8.3.1 的引脚和引脚对应时钟使能函数的宏定义,当用户工程LED引脚发生变化时,只需在此处做出修改即可。然后是对三个GPIO的输出函数进行接口宏定义以方便移植与阅读,如代码段 8.3.2 所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * LED亮灭函数宏定义
*/
#define ON  GPIO_PIN_RESET
#define OFF GPIO_PIN_SET

#define RLED(flag)        HAL_GPIO_WritePin(R_LED_GPIO_PORT, R_LED_GPIO_PIN, flag)   
#define GLED(flag)        HAL_GPIO_WritePin(G_LED_GPIO_PORT, G_LED_GPIO_PIN, flag)    
#define BLED(flag)        HAL_GPIO_WritePin(B_LED_GPIO_PORT, B_LED_GPIO_PIN, flag)  

HAL库中,对GPIO的输出控制函数是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

第一个参数 GPIOx表示GPIOA/B/C/D/E…/H中某一组端口,此处我们的实验是GPIOB,但是为方便移植我们使用宏定义的端口R_LED_GPIO_PORT、G_LED_GPIO_PORT、B_LED_GPIO_PORT;

第二个参数GPIO_Pin表示在某组端口中的某一个引脚,与选择端口类似,我们选择已宏定义好的R _LED_GPIO_PIN、G _LED_GPIO_PIN、B _LED_GPIO_PIN;

第三个参数PinState表示对这个IO控制输出的状态,是一个枚举类型,包含两个成员:GPIO_PIN_RESET和GPIO_PIN_SET。因为低电平亮灯,所以定义ON对应GPIO_PIN_RESET,OFF对应GPIO_PIN_SET。

2)GPIO的初始化 当选择好LED对应的GPIO后,还需要对其进行初始化,以完成对这些GPIO时钟的使能,工作模式的选择以及输出速度的设置。 代码段 8.3.3 GPIO初始化(driver_led.c)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 *  函数名:void LedGpioInit(void)
 *  输入参数:无
 *  输出参数:无
 *  返回值:无
 *  函数作用:初始化LED的引脚,配置为上拉推挽输出
*/
void LedGpioInit(void)
{
    // 定义GPIO的结构体变量
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    // 使能LED的GPIO对应的时钟
    R_LED_GPIO_CLK_EN();
    G_LED_GPIO_CLK_EN();
    B_LED_GPIO_CLK_EN();

    GPIO_InitStruct.Pin = R_LED_GPIO_PIN | G_LED_GPIO_PIN | B_LED_GPIO_PIN;         // 选择LED的引脚
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置为推挽输出模式
    GPIO_InitStruct.Pull = GPIO_PULLUP;         // 默认上拉
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;// 引脚反转速度设置为快

    // 初始化引脚配置
    HAL_GPIO_Init(R_LED_GPIO_PORT, &GPIO_InitStruct);

    // 默认LED灭:OFF-灭,ON-亮
    RLED(OFF);
     GLED(OFF);
BLED(OFF);
}

在此函数中,首先定义了一个结构体变量GPIO_InitStruct,先看看这个结构体中都有哪些成员。代码段 8.3.4 结构体GPIO_InitStruct定义(stm32f1xx_hal_gpio.h)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @brief GPIO Init structure definition
  */
typedef struct
{
  uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
                           This parameter can be any value of @ref GPIO_pins_define */

  uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
                           This parameter can be a value of @ref GPIO_mode_define */

  uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
                           This parameter can be a value of @ref GPIO_pull_define */

  uint32_t Speed;     /*!< Specifies the speed for the selected pins.
                           This parameter can be a value of @ref GPIO_speed_define */
} GPIO_InitTypeDef;
  • 6行:第一个成员pin是引脚选择;
  • 9行:第二个成员mode是模式选择:输出、输入、复用、中断、事件;
  • 12行:第三个成员是上拉、下拉、悬空选择;
  • 15行:第四个成员是输出速度选择;

当我们不清楚这些成员可以设置成哪些值时,可以看到每个成员的注释的最后有个@ref xxx,比如第7行末尾的“@ref GPIO_pins_define”,我们只需要选中这个GPIO_pins_define,然后按Ctrl+f寻找这个GPIO_pins_define,就会找到例如pin如下宏定义。 代码段 8.3.5 GPIO引脚宏定义(stm32f1xx_hal_gpio.h)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** @defgroup GPIO_pins_define GPIO pins define
  * @{
  */
#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */

#define GPIO_PIN_MASK              0x0000FFFFu /* PIN mask for assert test */

这里只需要选择其中需要的宏定义即可。然后使用三个宏定义的时钟使能函数使能了选择的GPIO的时钟。用上述设置GPIO_InitStruct成员讲解的方法设置每个成员的值之后,使用下述函数对选择的某组端口的GPIO引脚进行初始化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)

此处我们选择的是红灯的端口,但是在程序中我们的引脚选择是红绿蓝三个引脚都选择且进行了初始化,且红绿蓝三个灯所对应的端口均是GPIO B,所以实际上这个初始化函数是将三个LED的引脚都完成了初始化。

3)GPIO输出控制 在初始化函数的末尾,我们使用了宏定义的IO控制接口控制三个IO输出高电平,即让三灯均呈熄灭状态:代码段 8.3.6 控制LED灯熄灭(driver_led.c)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 默认LED灭:OFF-灭,ON-亮
    RLED(OFF);
    GLED(OFF);
    BLED(OFF);

4)HAL库延时 HAL库使用系统滴答定时器(此定时器在后序章节中详细讲解)封装了一个延时函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
__weak void HAL_Delay(uint32_t Delay)

在不对系统滴答定时器进行重新定义的情况下,此延时函数的效果是ms级,即延时Delay个毫秒。

5)整体控制逻辑 代码段 8.3.7 LED灯主函数(main.c)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(void)
{    
    // 初始化HAL库函数必须要调用此函数
    HAL_Init();
    // 系统时钟即AHB/APB时钟配置
    SystemClock_Config();
    
    // 初始化LED
    LedGpioInit();
        
    // 点亮三色灯
    RLED(ON);
    HAL_Delay(1000);
    RLED(OFF);
    
    GLED(ON);
    HAL_Delay(1000);
    GLED(OFF);
    
    BLED(ON);
    HAL_Delay(1000);
    BLED(OFF);
    
    while(1)
    {
        RLED(ON);
        HAL_Delay(1000);
        RLED(OFF);
        HAL_Delay(1000);
    }
}
  • 4行:对HAL库的初始化,这一步的作用是初始化中断优先级组别以及对系统滴答定时器进行默认的初始化;
  • 6行:时钟初始化,本实验所选择的是外部高速时钟,最终配置为72MHz系统时钟,关于时钟配置在后一章节讲解;
  • 9行:初始化LED;
  • 11~22行:初始控制逻辑:只红灯亮->只绿灯亮->只蓝灯亮;
  • 24~30行:死循环逻辑:闪烁红灯,周期是2s;

8.4实验效果

开发板三色LED灯,只红灯亮->只绿灯亮->只蓝灯亮,最后红灯间隔1秒闪烁。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
这5个机器学习项目你不可错过!(附代码)
本文共2299字,建议阅读6分钟。 本文将给大家介绍五个十分可怕但还鲜为人知的机器学习项目,囊括了一些潜在的机器学习的新想法。
数据派THU
2018/07/30
4380
这5个机器学习项目你不可错过!(附代码)
资源 | 可视化工具Yellowbrick:超参与行为的可视化带来更优秀的实现
机器之心编译 参与:思源、刘晓坤 Yellowbrick 是一套名为「Visualizers」的视觉诊断工具,它扩展了 Scikit-Learn API 以允许我们监督模型的选择过程。简而言之,Yel
机器之心
2018/06/12
8200
数据探索很麻烦?推荐一款史上最强大的特征分析可视化工具:yellowbrick
玩过建模的朋友都知道,在建立模型之前有很长的一段特征工程工作要做,而在特征工程的过程中,探索性数据分析又是必不可少的一部分,因为如果我们要对各个特征进行细致的分析,那么必然会进行一些可视化以辅助我们来做选择和判断。
Python数据科学
2019/08/15
1.5K0
SHAP 机器学习模型解释可视化工具
SHAP 是机器学习模型解释可视化工具。在此示例中,使用 SHAP 计算使用 Python 和 scikit-learn 的神经网络的特征影响 。对于这个例子,使用 scikit-learn 的 糖尿病数据集,它是一个回归数据集。首先安装shap库。
润森
2022/09/22
2.9K0
SHAP 机器学习模型解释可视化工具
【机器学习】关于机器学习模型可解释(XAI),再分享一招!
随着时间的推移,学习模型变得越来越复杂,很难直观地分析它们。人们经常听说机器学习模型是"黑匣子",从某种意义上说,它们可以做出很好的预测,但我们无法理解这些预测背后的逻辑。这种说法是正确的,因为大多数数据科学家发现很难从模型中提取见解。然而,我们可以使用一些工具从复杂的机器学习模型中提取见解。
黄博的机器学习圈子
2021/07/07
4020
【机器学习】关于机器学习模型可解释(XAI),再分享一招!
你不应该忽略的五个机器学习项目一览
随着人工智能和深度学习的兴起,网络上存在的学习资源以及开源项目也越来越多。本文精选了的五个项目,都含有潜在新的机器学习想法,且全都是用Python实现。下面简单介绍 下这五个项目,感兴趣的可以自己上手复现一下,说不定会对自己的项目产生一些新的想法。
用户3578099
2019/08/16
5590
从入门到精通Python机器学习:scikit-learn实战指南
在数据科学和机器学习领域,Python以其简洁的语法和强大的库支持,成为了许多开发者和研究者的首选语言。而在众多Python机器学习库中,scikit-learn以其易用性、灵活性和强大的算法集合,成为了最受欢迎的库之一。本文将深入探讨scikit-learn的原理和应用,并通过项目案例展示其在实际问题解决中的强大能力。
颜淡慕潇
2024/07/17
1.3K0
从入门到精通Python机器学习:scikit-learn实战指南
机器学习和 AI 领域必须了解的工具
关于数据科学,工具可能并不是那么热门的话题。人们似乎更关注最新的聊天机器人技术以及深度学习框架。 但这显然是不合理的。为什么不花些时间,挑选合适的工具呢?毕竟好的工具能够让你事半功倍。在本文中介绍了
CDA数据分析师
2018/02/05
1.4K0
机器学习和 AI 领域必须了解的工具
用可视化探索数据特征的N种姿势
数据可视化是指以图形或表格的形式显示信息。成功的可视化需要将数据或信息转换成可视的形式,以便能够借此分析或报告数据的特征和数据项或属性之间的关系。可视化的目标是形成可视化信息的人工解释和信息的意境模型。
数据STUDIO
2021/06/24
2.2K0
数据处理(三)| 深入数据预处理:提升机器学习模型性能的关键步骤
今天要和大家继续讲解机器学习中一个看似枯燥但至关重要的环节——数据预处理。前面已经讲解过数据清洗和数据评质量评估(点击跳转),如果你已看过,那你已经打下了坚实的基础!今天这篇内容会更聚焦于预处理的核心技巧,手把手教你如何将原始数据“打磨”成模型的最爱。
CoovallyAIHub
2025/03/03
2590
数据处理(三)| 深入数据预处理:提升机器学习模型性能的关键步骤
机器学习实战 | SKLearn入门与简单应用案例
教程地址:http://www.showmeai.tech/tutorials/41
ShowMeAI
2022/03/21
1.3K0
机器学习实战 | SKLearn入门与简单应用案例
Scikit-learn的模型设计与选择
目的:本文的目的是从头到尾构建一个管道,以便在合成数据集上访问18个机器学习模型的预测性能。
代码医生工作室
2019/07/12
2.4K0
Scikit-learn的模型设计与选择
深入Scikit-learn:掌握Python最强大的机器学习库
在人工智能大潮的推动下,机器学习作为一项核心技术,其重要性无需过多强调。然而,如何快速高效地开展机器学习实验与开发,则是许多科研工作者和工程师们面临的挑战。Python作为一种简洁易读、拥有丰富科学计算库的编程语言,已广泛应用于机器学习领域。而在Python的众多机器学习库中,Scikit-learn以其全面的功能、优良的性能和易用性,赢得了众多用户的喜爱。在本篇文章中,我们将深入探讨Scikit-learn的使用方法和内部机制,帮助读者更好地利用这一工具进行机器学习实验。
TechLead
2023/10/21
1.8K0
深入Scikit-learn:掌握Python最强大的机器学习库
【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现
决策树由节点和边组成,其中每个节点表示数据集的某个特征,每条边表示特征的某个值所对应的分支。决策树的最顶端称为根节点,叶节点代表决策结果。以下是一个简单的决策树示例图:
哈__
2024/06/23
4170
【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现
7000 字精华总结,Pandas/Sklearn 进行机器学习之特征筛选,有效提升模型性能
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编来说说如何通过pandas以及sklearn这两个模块来对数据集进行特征筛选,毕竟有时候我们拿到手的数据集是非常庞大的,有着非常多的特征,减少这些特征的数量会带来许多的好处,例如 提高预测的精准度 降低过拟合的风险 加快模型的训练速度 增加模型的可解释性 事实上,很多时候也并非是特征数量越多训练出来的模型越好,当添加的特征多到一定程度的时候,模型的性能就会下降,从下图中我们可以看出, 因此我们需要找到哪些特征是最佳的使用特征,当然我们这里分连续型的变
AI科技大本营
2023/04/14
8110
7000 字精华总结,Pandas/Sklearn 进行机器学习之特征筛选,有效提升模型性能
机器学习建模高级用法!构建企业级AI建模流水线 ⛵
我们知道机器学习应用过程包含很多步骤,如图所示『标准机器学习应用流程』,有数据预处理、特征工程、模型训练、模型迭代优化、部署预估等环节。
ShowMeAI
2022/08/09
1.3K0
机器学习建模高级用法!构建企业级AI建模流水线 ⛵
【机器学习基础】关于Scikit-Learn,你不一定知道的10件事
Scikit-learn是使用最广泛的Python机器学习库之一。它有一个标准化和简单的接口用来预处理数据和进行模型的训练,优化和评估。
黄博的机器学习圈子
2020/07/24
1.1K0
【机器学习基础】关于Scikit-Learn,你不一定知道的10件事
强大的 Scikit-learn 可视化让模型说话
使用 utils.discovery.all_displays 查找可用的 API。
数据STUDIO
2024/05/10
2760
强大的 Scikit-learn 可视化让模型说话
用Python与Scikit-learn构建高效机器学习模型
文章链接:https://cloud.tencent.com/developer/article/2472162
一键难忘
2024/11/29
2950
牛逼了!Scikit-learn 0.22新版本发布,新功能更加方便
作者:xiaoyu,数据爱好者 Scikit-learn此次发布的版本为0.22。我浏览了一下,此次版本除了修复之前出现的一些bug,还更新了很多新功能,不得不说更加好用了。下面我把我了解到主要的几个最新功能和大家分享一下。
Python数据科学
2019/12/18
1.4K0
推荐阅读
相关推荐
这5个机器学习项目你不可错过!(附代码)
更多 >
LV.2
这个人很懒,什么都没有留下~
目录
  • 8.1 关于GPIO
    • 8.1.1STM32的GPIO
    • 8.1.1STM32的GPIO
    • 8.1.2 GPIO工作模式
    • 8.1.3GPIO输出速度
  • 8.2硬件设计
  • 8.3软件设计
    • 8.3.1软件设计思路
    • 8.3.2软件设计讲解
  • 8.4实验效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档