复旦微魔方FM33FR0xx——FL库笔记-GPIO

2023-10-29

一、引用文件

#include "fm33lg0xx_fl_gpio.h"

1.GPIO初始化定义

typedef struct
{
    uint32_t pin;             /* PIN*/
    uint32_t mode;            /* 功能模式*/
    uint32_t outputType;      /* 输出类型*/
    uint32_t driveStrength;   /* 驱动强度*/
    uint32_t pull;            /* 上拉/下拉选择使能*/
    uint32_t remapPin;        /* 数字功能重定向*/
    FL_FunState analogSwitch; /*! 模拟开关使能 */
} FL_GPIO_InitTypeDef;

2.待机唤醒定义

typedef struct
{
    uint32_t polarity;
} FL_WKUP_InitTypeDef;

3.GPIO常量

#define    GPIO_PUDEN_PUD_Pos              (16U)
#define    GPIO_PUDEN_PUD_Msk              (0x1U << GPIO_PUDEN_PUD_Pos)
#define    GPIO_PUDEN_PUD                  GPIO_PUDEN_PUD_Msk

#define    GPIO_PUDEN_PUDEN_Pos            (0U)
#define    GPIO_PUDEN_PUDEN_Msk            (0xffffU << GPIO_PUDEN_PUDEN_Pos)
#define    GPIO_PUDEN_PUDEN                GPIO_PUDEN_PUDEN_Msk

#define    GPIO_FCR_Pos                    (0U)
#define    GPIO_FCR_Msk                    (0x3U << GPIO_FCR_Pos)
#define    GPIO_FCR                        GPIO_FCR_Msk
.
.
.
#define    GPIO_FOUTSEL_FOUT1_Pos          (4U)
#define    GPIO_FOUTSEL_FOUT1_Msk          (0xfU << GPIO_FOUTSEL_FOUT1_Pos)
#define    GPIO_FOUTSEL_FOUT1              GPIO_FOUTSEL_FOUT1_Msk

#define    GPIO_EXTISEL0_EXTI0_Pos         (0U)
#define    GPIO_EXTISEL0_EXTI0_Msk         (0x3U << GPIO_EXTISEL0_EXTI0_Pos)
#define    GPIO_EXTISEL0_EXTI0             GPIO_EXTISEL0_EXTI0_Msk
.
.
.

4.GPIO引脚定义

#define    FL_GPIO_PIN_0                  (0x1U << 0U)
#define    FL_GPIO_PIN_1                  (0x1U << 1U)
#define    FL_GPIO_PIN_2                  (0x1U << 2U)
#define    FL_GPIO_PIN_3                  (0x1U << 3U)
#define    FL_GPIO_PIN_4                  (0x1U << 4U)
#define    FL_GPIO_PIN_5                  (0x1U << 5U)
#define    FL_GPIO_PIN_6                  (0x1U << 6U)
#define    FL_GPIO_PIN_7                  (0x1U << 7U)
#define    FL_GPIO_PIN_8                  (0x1U << 8U)
#define    FL_GPIO_PIN_9                  (0x1U << 9U)
#define    FL_GPIO_PIN_10                 (0x1U << 10U)
#define    FL_GPIO_PIN_11                 (0x1U << 11U)
#define    FL_GPIO_PIN_12                 (0x1U << 12U)
#define    FL_GPIO_PIN_13                 (0x1U << 13U)
#define    FL_GPIO_PIN_14                 (0x1U << 14U)
#define    FL_GPIO_PIN_15                 (0x1U << 15U)
#define    FL_GPIO_PIN_ALL                (0xffffU << 0U)
#define    FL_GPIO_PIN_ALL_EXCEPTSWD      0xFE7FU
.
.
.

5.GPIO函数

输入启动:FL_GPIO_EnablePinInput()

__STATIC_INLINE void FL_GPIO_EnablePinInput(GPIO_Type *GPIOx, uint32_t pin)
{
    SET_BIT(GPIOx->INEN, ((pin & 0xffff) << 0x0U));
}

输入禁用:FL_GPIO_DisablePinInput()

__STATIC_INLINE void FL_GPIO_DisablePinInput(GPIO_Type *GPIOx, uint32_t pin)
{
    CLEAR_BIT(GPIOx->INEN, ((pin & 0xffff) << 0x0U));
}

获取输入启用状态:FL_GPIO_IsEnabledPinInput()

__STATIC_INLINE uint32_t FL_GPIO_IsEnabledPinInput(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->INEN, ((pin & 0xffff) << 0x0U)) == ((pin & 0xffff) << 0x0U));
}

选择上拉或下拉:FL_GPIO_SetPinPullMode()

__STATIC_INLINE void FL_GPIO_SetPinPullMode(GPIO_Type *GPIOx, uint32_t pin, uint32_t pullmode)
{
    MODIFY_REG(GPIOx->PUDEN, (pin * GPIO_PUDEN_PUD), (pin * pullmode));
}

获取上拉或下拉状态:FL_GPIO_GetPinPullMode()

__STATIC_INLINE uint32_t FL_GPIO_GetPinPullMode(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->PUDEN, (pin * GPIO_PUDEN_PUD)) / pin);
}

上拉或下拉启用:FL_GPIO_EnablePinPullupOrPulldown()

__STATIC_INLINE void FL_GPIO_EnablePinPullupOrPulldown(GPIO_Type *GPIOx, uint32_t pin)
{
    SET_BIT(GPIOx->PUDEN, ((pin & 0xffff) << 0x0U));
}

上拉或下拉禁用:FL_GPIO_DisablePinPullupOrPulldown()

__STATIC_INLINE void FL_GPIO_DisablePinPullupOrPulldown(GPIO_Type *GPIOx, uint32_t pin)
{
    CLEAR_BIT(GPIOx->PUDEN, ((pin & 0xffff) << 0x0U));
}

获取上拉或下拉启用状态:FL_GPIO_IsEnabledPinPullupOrPulldown()

__STATIC_INLINE uint32_t FL_GPIO_IsEnabledPinPullupOrPulldown(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->PUDEN, ((pin & 0xffff) << 0x0U)) == ((pin & 0xffff) << 0x0U));
}

启用开漏:FL_GPIO_EnablePinOpenDrain()

__STATIC_INLINE void FL_GPIO_EnablePinOpenDrain(GPIO_Type *GPIOx, uint32_t pin)
{
    SET_BIT(GPIOx->ODEN, ((pin & 0xffff) << 0x0U));
}

禁用开漏:FL_GPIO_DisablePinOpenDrain()

__STATIC_INLINE void FL_GPIO_DisablePinOpenDrain(GPIO_Type *GPIOx, uint32_t pin)
{
    CLEAR_BIT(GPIOx->ODEN, ((pin & 0xffff) << 0x0U));
}

获取开漏启用状态:FL_GPIO_IsEnabledPinOpenDrain()

__STATIC_INLINE uint32_t FL_GPIO_IsEnabledPinOpenDrain(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->ODEN, ((pin & 0xffff) << 0x0U)) == ((pin & 0xffff) << 0x0U));
}

设置引脚模式:FL_GPIO_SetPinMode()

__STATIC_INLINE void FL_GPIO_SetPinMode(GPIO_Type *GPIOx, uint32_t pin, uint32_t mode)
{
    MODIFY_REG(GPIOx->FCR, ((pin * pin) * GPIO_FCR), ((pin * pin) * mode));
}

获取引脚模式:FL_GPIO_GetPinMode()

__STATIC_INLINE uint32_t FL_GPIO_GetPinMode(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->FCR, ((pin * pin) * GPIO_FCR)) / (pin * pin));
}

设置GPIO输出数据:FL_GPIO_WriteOutputPort()

__STATIC_INLINE void FL_GPIO_WriteOutputPort(GPIO_Type *GPIOx, uint32_t output)
{
    MODIFY_REG(GPIOx->DO, (0xffffU << 0U), (output << 0U));
}

获取GPIO输出数据:FL_GPIO_ReadOutputPort()

__STATIC_INLINE uint32_t FL_GPIO_ReadOutputPort(GPIO_Type *GPIOx)
{
    return (uint32_t)(READ_BIT(GPIOx->DO, (0xffffU << 0U)) >> 0U);
}

获取GPIO输出引脚状态:FL_GPIO_GetOutputPin()

__STATIC_INLINE uint32_t FL_GPIO_GetOutputPin(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->DO, ((pin & 0xffff) << 0x0U)) == ((pin & 0xffff) << 0x0U));
}

切换输出脚:FL_GPIO_ToggleOutputPin()

__STATIC_INLINE void FL_GPIO_ToggleOutputPin(GPIO_Type *GPIOx, uint32_t pin)
{
    WRITE_REG(GPIOx->DO, READ_REG(GPIOx->DO) ^ pin);
}

设置引脚输出1:FL_GPIO_SetOutputPin()

__STATIC_INLINE void FL_GPIO_SetOutputPin(GPIO_Type *GPIOx, uint32_t pin)
{
    SET_BIT(GPIOx->DSET, ((pin & 0xffff) << 0x0U));
}

设置引脚输出0:FL_GPIO_ResetOutputPin()

__STATIC_INLINE void FL_GPIO_ResetOutputPin(GPIO_Type *GPIOx, uint32_t pin)
{
    SET_BIT(GPIOx->DRST, ((pin & 0xffff) << 0x0U));
}

获取输入数据:FL_GPIO_ReadInputPort()

__STATIC_INLINE uint32_t FL_GPIO_ReadInputPort(GPIO_Type *GPIOx)
{
    return (uint32_t)(READ_BIT(GPIOx->DIN, (0xffffU << 0U)) >> 0U);
}

获取GPIO输入集状态:FL_GPIO_GetInputPin()

__STATIC_INLINE uint32_t FL_GPIO_GetInputPin(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->DIN, ((pin & 0xffff) << 0x0U)) == ((pin & 0xffff) << 0x0U));
}

设置GPIOx数字功能:FL_GPIO_SetPinRemap()

__STATIC_INLINE void FL_GPIO_SetPinRemap(GPIO_Type *GPIOx, uint32_t pin, uint32_t function)
{
    MODIFY_REG(GPIOx->DFS, ((pin * pin) * GPIO_DFS), ((pin * pin) * function));
}

获取GPIOx数字函数:FL_GPIO_GetPinRemap()

__STATIC_INLINE uint32_t FL_GPIO_GetPinRemap(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->DFS, ((pin * pin) * GPIO_DFS)) / (pin * pin));
}

GPIOx模拟通道使能:FL_GPIO_EnablePinAnalogSwitch()

__STATIC_INLINE void FL_GPIO_EnablePinAnalogSwitch(GPIO_Type *GPIOx, uint32_t pin)
{
    SET_BIT(GPIOx->ANEN, ((pin & 0xffff) << 0x0U));
}

GPIOx模拟通道禁用:FL_GPIO_DisablePinAnalogSwitch()

__STATIC_INLINE void FL_GPIO_DisablePinAnalogSwitch(GPIO_Type *GPIOx, uint32_t pin)
{
    CLEAR_BIT(GPIOx->ANEN, ((pin & 0xffff) << 0x0U));
}

获取GPIOx模拟通道启用状态:FL_GPIO_IsEnabledPinAnalogSwitch()

__STATIC_INLINE uint32_t FL_GPIO_IsEnabledPinAnalogSwitch(GPIO_Type *GPIOx, uint32_t pin)
{
    return (uint32_t)(READ_BIT(GPIOx->ANEN, ((pin & 0xffff) << 0x0U)) == ((pin & 0xffff) << 0x0U));
}

设置引脚驱动强度:FL_GPIO_SetPinDriveStrength()

__STATIC_INLINE void FL_GPIO_SetPinDriveStrength(GPIO_Type *GPIOx, uint32_t pin, uint32_t strength)
{
    MODIFY_REG(GPIOx->DSR, ((pin * pin) * GPIO_DSR), ((pin * pin) * strength));
}

获取引脚驱动强度:FL_GPIO_GetPinDriveStrength()

__STATIC_INLINE uint32_t FL_GPIO_GetPinDriveStrength(GPIO_Type *GPIOx, uint32_t strength)
{
    return (uint32_t)(READ_BIT(GPIOx->DSR, ((strength * strength) * GPIO_DSR)) / (strength * strength));
}

设置PC  1 - 8  定时器通道选择:FL_GPIO_SetPC  8  TimerChannelSelection()

__STATIC_INLINE void FL_GPIO_SetPC8TimerChannelSelection(uint32_t channel)
{
    MODIFY_REG(GPIOC->TMUXR, GPIO_TMUXR_PC8TMUX_Msk, channel);
}

获取PC  1 - 8  定时器通道选择:FL_GPIO_SetPC  8  TimerChannelSelection()

__STATIC_INLINE uint32_t FL_GPIO_GetPC8TimerChannelSelection(void)
{
    return (uint32_t)(READ_BIT(GPIOC->TMUXR, GPIO_TMUXR_PC8TMUX_Msk));
}

获取PC1定时器通道选择:FL_GPIO_GetPC1TimerChannelSelection()

__STATIC_INLINE uint32_t FL_GPIO_GetPC1TimerChannelSelection(void)
{
    return (uint32_t)(READ_BIT(GPIOC->TMUXR, GPIO_TMUXR_PC1TMUX_Msk));
}

设置边缘触发  0 - 1  :FL_GPIO_SetTriggerEdge 0 ()

__STATIC_INLINE void FL_GPIO_SetTriggerEdge0(GPIO_COMMON_Type *GPIOx, uint32_t line, uint32_t edge)
{
    MODIFY_REG(GPIOx->EXTIEDS0, ((line * line) * GPIO_EXTIEDS0), ((line * line) * edge));
}

获取边缘触发  0 - 1  :FL_GPIO_GetTriggerEdge 0 ()

__STATIC_INLINE uint32_t FL_GPIO_GetTriggerEdge0(GPIO_COMMON_Type *GPIOx, uint32_t line)
{
    return (uint32_t)(READ_BIT(GPIOx->EXTIEDS0, ((line * line) * GPIO_EXTIEDS0)) / (line * line));
}

启动中断数字滤波器:FL_GPIO_EnableDigitalFilter()

__STATIC_INLINE void FL_GPIO_EnableDigitalFilter(GPIO_COMMON_Type *GPIOx, uint32_t line)
{
    SET_BIT(GPIOx->EXTIDF, ((line & 0x3fffff) << 0x0U));
}

禁用中断数字滤波器:FL_GPIO_DisableDigitalFilter()

__STATIC_INLINE void FL_GPIO_DisableDigitalFilter(GPIO_COMMON_Type *GPIOx, uint32_t line)
{
    CLEAR_BIT(GPIOx->EXTIDF, ((line & 0x3fffff) << 0x0U));
}

获取EXTI数字滤波器启用状态:FL_GPIO_IsEnabledDigitalFilter()

__STATIC_INLINE uint32_t FL_GPIO_IsEnabledDigitalFilter(GPIO_COMMON_Type *GPIOx, uint32_t line)
{
    return (uint32_t)(READ_BIT(GPIOx->EXTIDF, ((line & 0x3fffff) << 0x0U)) == ((line & 0x3fffff) << 0x0U));
}

获取外部中断标志状态:FL_GPIO_IsActiveFlag_EXTI()

__STATIC_INLINE uint32_t FL_GPIO_IsActiveFlag_EXTI(GPIO_COMMON_Type *GPIOx, uint32_t line)
{
    return (uint32_t)(READ_BIT(GPIOx->EXTIISR, ((line & 0x3fffff) << 0x0U)) == ((line & 0x3fffff) << 0x0U));
}

获取EXTI输入集状态:FL_GPIO_GetEXTILine()

__STATIC_INLINE uint32_t FL_GPIO_GetEXTILine(GPIO_COMMON_Type *GPIOx, uint32_t line)
{
    return (uint32_t)(READ_BIT(GPIOx->EXTIDI, ((line & 0x3fffff) << 0x0U)) == ((line & 0x3fffff) << 0x0U));
}

获取EXTI输入状态:FL_GPIO_ReadEXTILines()

__STATIC_INLINE uint32_t FL_GPIO_ReadEXTILines(GPIO_COMMON_Type *GPIOx)
{
    return (uint32_t)(READ_BIT(GPIOx->EXTIDI, (0x3fffffU << 0U)) >> 0U);
}

设置  PD11 - PB12  输出频率:FL_GPIO_SetFOUT 0 ()

__STATIC_INLINE void FL_GPIO_SetFOUT0(GPIO_COMMON_Type *GPIOx, uint32_t select)
{
    MODIFY_REG(GPIOx->FOUTSEL, GPIO_FOUTSEL_FOUT0_Msk, select);
}

获取  PD11 - PB12  输出频率:FL_GPIO_GetFOUT 0 ()

__STATIC_INLINE uint32_t FL_GPIO_GetFOUT0(GPIO_COMMON_Type *GPIOx)
{
    return (uint32_t)(READ_BIT(GPIOx->FOUTSEL, GPIO_FOUTSEL_FOUT0_Msk));
}

设置EXTI  0 - 21  中断输入:FL_GPIO_SetExtiLine0()

__STATIC_INLINE void FL_GPIO_SetExtiLine0(GPIO_COMMON_Type *GPIOx, uint32_t EXTIPin)
{
    MODIFY_REG(GPIOx->EXTISEL1, GPIO_EXTISEL1_EXTI21_Msk, EXTIPin);
}

获取EXTI  0 - 21  中断输入:FL_GPIO_GetExtiLine0()

__STATIC_INLINE uint32_t FL_GPIO_GetExtiLine21(GPIO_COMMON_Type *GPIOx)
{
    return (uint32_t)(READ_BIT(GPIOx->EXTISEL1, GPIO_EXTISEL1_EXTI21_Msk));
}

获取低功耗唤醒启用状态:FL_GPIO_IsEnabledWakeup()

__STATIC_INLINE uint32_t FL_GPIO_IsEnabledWakeup(GPIO_COMMON_Type *GPIOx, uint32_t wakeup)
{
    return (uint32_t)(READ_BIT(GPIOx->PINWKEN, ((wakeup & 0x1ff) << 0x0U)) == ((wakeup & 0x1ff) << 0x0U));
}

启用低功耗唤醒:FL_GPIO_EnableWakeup()

__STATIC_INLINE void FL_GPIO_EnableWakeup(GPIO_COMMON_Type *GPIOx, uint32_t wakeup)
{
    SET_BIT(GPIOx->PINWKEN, ((wakeup & 0x1ff) << 0x0U));
}

禁用低功耗唤醒:FL_GPIO_DisableWakeup()

__STATIC_INLINE void FL_GPIO_DisableWakeup(GPIO_COMMON_Type *GPIOx, uint32_t wakeup)
{
    CLEAR_BIT(GPIOx->PINWKEN, ((wakeup & 0x1ff) << 0x0U));
}

获取低功耗唤醒中断入口:FL_GPIO_GetWakeupInterruptEntry()

__STATIC_INLINE uint32_t FL_GPIO_GetWakeupInterruptEntry(GPIO_COMMON_Type *GPIOx)
{
    return (uint32_t)(READ_BIT(GPIOx->PINWKEN, GPIO_PINWKEN_WKSEL_Msk));
}

设置低功耗唤醒中断项:FL_GPIO_SetWakeupInterruptEntry()

__STATIC_INLINE void FL_GPIO_SetWakeupInterruptEntry(GPIO_COMMON_Type *GPIOx, uint32_t wakeup)
{
    MODIFY_REG(GPIOx->PINWKEN, GPIO_PINWKEN_WKSEL_Msk, wakeup);
}

设置低功耗唤醒边缘触发:FL_GPIO_SetWakeupEdge()

__STATIC_INLINE void FL_GPIO_SetWakeupEdge(GPIO_COMMON_Type *GPIOx, uint32_t wakeup, uint32_t mode)
{
    MODIFY_REG(GPIOx->PINWKEN, ((wakeup * wakeup) * GPIO_PINWKEN_SEL), ((wakeup * wakeup) * mode));
}

获取低功耗唤醒边缘触发:FL_GPIO_GetWakeupEdge()

__STATIC_INLINE uint32_t FL_GPIO_GetWakeupEdge(GPIO_COMMON_Type *GPIOx, uint32_t wakeup)
{
    return (uint32_t)(READ_BIT(GPIOx->PINWKEN, ((wakeup * wakeup) * GPIO_PINWKEN_SEL)) / (wakeup * wakeup));
}

二、快速IO操作指南

1.GPIO位输出高电平

FL_GPIO_SetOutputPin(GPIOC,FL_GPIO_PIN_1); /*PC1 输出高电平*/

2.GPIO位输出低电平

FL_GPIO_ResetOutputPin(GPIOC,FL_GPIO_PIN_1); /* PC1 输出低电平 */

3.GPIO位输出电平翻转

FL_GPIO_ToggleOutputPin(GPIOC,FL_GPIO_PIN_1); /* PC1 输出翻转 */

4.GPIO端口8位并口输出

#define PC07_Out_Pin          FL_GPIO_PIN_0 | FL_GPIO_PIN_1 | FL_GPIO_PIN_2 | FL_GPIO_PIN_3 | \
                              FL_GPIO_PIN_4 | FL_GPIO_PIN_5 | FL_GPIO_PIN_6 | FL_GPIO_PIN_7

FL_GPIO_WriteOutputPort(GPIOx, Data + (FL_GPIO_ReadOutputPort(GPIOx) & (~(PC07_Out_Pin))));

FL_GPIO_WriteOutputPort(GPIOC,0xAA);/* PC0~PC7输出0xAA */
FL_GPIO_WriteOutputPort(GPIOC,0x55);/* PC0~PC7输出0x55 */

5.GPIO端口16位并口输出

FL_GPIO_WriteOutputPort(GPIOC,0xAA55); /* PC0~PC15输出0xAA55 */

6.GPIO输出位读取

FL_GPIO_GetOutputPin(GPIOC,FL_GPIO_PIN_1); /* PC1 输出位读取 */

7.GPIO输入位读取判断

#define PC1Data (FL_GPIO_ReadInputPort(GPIOC)&FL_GPIO_PIN_1)

if(PC1Data != 0 )
{
	/* 当前PC1输入为高电平 */
}
else
{
	/* 当前PC1输入为低电平 */
}

8.GPIO输入16位并口读取

uint16_t GPIOC_Data=0;
GPIOC_Data = FL_GPIO_ReadInputPort(GPIOC);/* PC0~PC15端口数据读取 */

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复旦微魔方FM33FR0xx——FL库笔记-GPIO 的相关文章

  • AcWing 420. 火星人

    人类终于登上了火星的土地并且见到了神秘的火星人 人类和火星人都无法理解对方的语言 但是我们的科学家发明了一种用数字交流的方法 这种交流方法是这样的 首先 火星人把一个非常大的数字告诉人类科学家 科学家破解这个数字的含义后 再把一个很小的数字
  • 多源迁移学习网络补充知识用于具有不可见故障的机器智能诊断

    摘要 当前基于深度迁移学习的故障诊断的大多数成功需要两个假设 1 源机器的健康状态集合应当与目标机器的健康状态集合重叠 2 目标机器样本的数量跨健康状态平衡 然而 这样的假设在工程场景中是不现实的 其中目标机器遭受在源机器中看不到的故障类型
  • 华硕主板已经开启VT-D虚拟化,但是进了win10还是CPU显示Hyper-V显示已禁用

    最近X宝看i5 8400的便宜好几百大洋 就入手一台当家里照片文档FTP服务器 系统win10装好 常用软件安装完成 准备来安装Hyper V了 在 程序和功能 里面的 Hyper V的虚拟机监控程序 是灰色的 老司机了 这难不倒我 一般都
  • CmakeList--gflags

    set GFLAGS LIBRARIES usr lib x86 64 linux gnu libgflags so

随机推荐

  • vue-cli3+electron出现白屏现象

    近期使用electron vue cli3 0开发了一个跨平台项目 进行登录后路由跳转出现白屏现象 原因在于路由使用了history模式 history模式在electron环境中会出现 路由跳转的白屏现象 因此 需要将histroy模式修
  • deepin自带wine使用方法_忘记Windows!国产深度v20正式版来袭,永久免费使用!

    最近win10系统更新出现各种bug 真是让人头痛 但是 就在我们在win10漩涡中晕头转向的时候 很多朋友都没有留意到 我们的国产操作系统 deepin 20正式版 在9月份已经正式发布 而直至10月份 距离deepin 20正式版发布一
  • Python实现邮箱自动发送代码(包含正文图片、附件文件)

    以下为源码 仅供大家学习 抄送实现是同一封邮件发送2次 如想实现发送人和抄送人显示中文名字 在list集合中添加中文名字即可 旭旭同学测试 lt 12341324 qq com gt 测试 lt 1341 qq com gt 不足之处请大家
  • Qt 多线程/多窗口 参数传递

    文章目录 注意 传递 Qt 支持的数据类型 主线程 gt 子线程 子线程 gt 主线程 主窗口 gt 子窗口 子窗口 gt 主窗口 传递自己定义的数据类型 第一步 定义数据类型 第二步 在 main 函数中注册该数据类型 第三步 开始传参数
  • 博客同时部署Github和Coding page

    前期 注册账号不讲了 现在都是以团队注册 注册完后 记得到团队设置里面 找到实名认证 在初次使用静态网站服务前 需要团队拥有者完成实名认证 然后需要在个人设置里绑定邮箱和设置密码 顺便把公钥添加下 创建一个项目 然后点进这个项目中 部署静态
  • phpstorm 配置apache路径

    初学php 如何自动将phpstorm中的文件部署到设定好的目录中 用了 我的路径是apache里面配置的路径ServerRoot
  • CentOS 7二进制文件安装nodejs

    根据自己的经验编写在linux系统CentOS下安装nodejs的过程 本篇介绍二进制文件直接解压安装的过程 方法 步骤 1 如图所示 在nodejs官网下载压缩包 根据自己的系统是32位还是64位选择压缩包 别选错类型哦 2 安装前要先安
  • sklearn——加载数据集

    1 通用数据集 API 根据所需数据集的类型 有三种主要类型的数据集API接口可用于获取数据集 方法一 loaders 可用来加载小的标准数据集 在玩具数据集中有介绍 方法二 fetchers 可用来下载并加载大的真实数据集 在真实世界中的
  • 无法生成“F:\system voiume information”下的常规文件夹列表拒绝访问

    1 产生问题 将桌面从属性 位置直接改到了F盘 F盘上的东西全显示在桌面上 2 解决问题 1 点击还原默认值后显示要下图 选择否 win10可以用 然后再次移动到你需要的位置即可 2 win7可以用 win10并没有用成 1 按win r
  • 图的创建和遍历

    图的定义 由顶点的有穷非空集合和顶点之间边的集合组成的数据类型 图的表示 G V E G表示一个图 V是图G的顶点集合 E为图G的边的集合 图的逻辑结构 多对多 图的存储结构 邻接矩阵 邻接表 十字链表 邻接多重表 图的一些无聊术语 顶点i
  • 多源bfs

    这是 LeetCode 上的 1162 地图分析 难度为 中等 与 单源最短路 不同 多源最短路 问题是求从 多个源点 到达 一个 多个汇点 的最短路径 在实现上 最核心的搜索部分 多源 BFS 与 单源 BFS 并无区别 并且通过建立 虚
  • 日常管理的五条小建议

    原文作者 Johanna Rothman著作 门后的秘密 卓越管理的故事 有时候 你需要为工作理一理头绪 你需要给自己一些喘息的机会 停下来 思考一会儿 这里有一些小建议 可以帮助你处理好日常管理工作 计划并安排一对一会谈 做管理意味着你要
  • 基于Hadoop的Knn算法实现

    Knn算法的核心思想是如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别 则该样本也属于这个类别 并具有这个类别上样本的特性 该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别 Knn方法在类
  • Qt配置设置,修改全文字体大小颜色,背景颜色

    这是完成时的demo 选择所需 点击确认修改 全局修改 效果第二张图 在没有点击确认修改时 字体等按钮的改变只会在文本框里面体现出来 点击确认才会修改全局的东西 点击恢复默认时 字体字号颜色控件全部恢复初始状态 当点击确认修改 全局才会改为
  • python大文件的上传

    python大文件的上传 下载是同样的套路 下面是简单的代码 server端代码 import socket import json import struct buffer 1024 这里使用1024在上传视频的时候不容易出错 如果选择更
  • MATLAB智能优化算法 - 粒子群算法及MATLAB实例仿真

    一 粒子群算法理论 粒子群算法来源于鸟类集体活动的规律性 进而利用群体智能建立简化模型 它模拟的是鸟类的觅食行为 将求解问题的空间比作鸟类飞行的时间 每只鸟抽象成没有体积和质量的粒子 来表征一个问题的可行解 1 1 粒子群算法建模 粒子群算
  • 信号槽的概念与使用

    下面对Qt所设计的信号槽机制进行解析 部分摘自网络 信号 当对象改变其状态时 信号就由该对象发射 emit 出去 而且对象只负责发送信号 它不知道另一端是谁在接收这个信号 这样就做到了真正的信息封装 能确保对象被当作一个真正的软件组件来使用
  • python之实现ts转MP4

    import subprocess import os def convert ts to mp4 input path output path ffmpeg cmd f ffmpeg i input path c copy output
  • kconfig与Makefile运行机制

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式 模块和直接编译进内核 并介绍了模块的一种编译方式 在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢 在我们实际内核的移植配置过程中经常听说的内
  • 复旦微魔方FM33FR0xx——FL库笔记-GPIO

    一 引用文件 include fm33lg0xx fl gpio h 1 GPIO初始化定义 typedef struct uint32 t pin PIN uint32 t mode 功能模式 uint32 t outputType 输出