FSMC寄存器方式初始化及LCD函数

环境

芯片:STM32F103ZET6
库:stm32f10x.h

原理图

代码

  • Driver.FSMC.h

    • #ifndef __DRIVER_FSMC
      #define __DRIVER_FSMC
      #include "stm32f10x.h"void Driver_FSMC_Init(void);#endif
      
  • Driver.FSMC.c

    • #include "Driver_FSMC.h"/*** 配置FSMC(Flexible Static Memory Controller)相关的GPIO端口* 该函数的目的是根据FSMC的引脚配置要求,设置相应的GPIO端口模式和功能*/
      void Driver_FSMC_GPIO_Config(void)
      {/* 1 配置 A10 (PG0) 复用推挽输出CNY:10 50MHz速度 MODE:11*//* =============MODE=============== */GPIOG->CRL |= GPIO_CRL_MODE0;GPIOG->CRL |= GPIO_CRL_CNF0_1;GPIOG->CRL &= ~GPIO_CRL_CNF0_0;/*2 数据端口 复用推挽输出在实际应用中,即使数据线被配置为输出模式,FSMC控制器仍然能够管理数据线的方向,使其在需要时成为输入线。这种自动切换是由FSMC控制器硬件管理的,不需要软件干预。因此,即使GPIO配置为复用推挽输出,FSMC依然可以实现读取操作。*//* =============MODE=============== */GPIOD->CRL |= (GPIO_CRL_MODE0 |GPIO_CRL_MODE1);GPIOD->CRH |= (GPIO_CRH_MODE8 |GPIO_CRH_MODE9 |GPIO_CRH_MODE10 |GPIO_CRH_MODE14 |GPIO_CRH_MODE15);GPIOE->CRL |= (GPIO_CRL_MODE7);GPIOE->CRH |= (GPIO_CRH_MODE8 |GPIO_CRH_MODE9 |GPIO_CRH_MODE10 |GPIO_CRH_MODE11 |GPIO_CRH_MODE12 |GPIO_CRH_MODE13 |GPIO_CRH_MODE14 |GPIO_CRH_MODE15);/* =============CNF=============== */GPIOD->CRL |= (GPIO_CRL_CNF0_1 |GPIO_CRL_CNF1_1);GPIOD->CRL &= ~(GPIO_CRL_CNF0_0 |GPIO_CRL_CNF1_0);GPIOD->CRH |= (GPIO_CRH_CNF8_1 |GPIO_CRH_CNF9_1 |GPIO_CRH_CNF10_1 |GPIO_CRH_CNF14_1 |GPIO_CRH_CNF15_1);GPIOD->CRH &= ~(GPIO_CRH_CNF8_0 |GPIO_CRH_CNF9_0 |GPIO_CRH_CNF10_0 |GPIO_CRH_CNF14_0 |GPIO_CRH_CNF15_0);GPIOE->CRL |= (GPIO_CRL_CNF7_1);GPIOE->CRL &= ~(GPIO_CRL_CNF7_0);GPIOE->CRH |= (GPIO_CRH_CNF8_1 |GPIO_CRH_CNF9_1 |GPIO_CRH_CNF10_1 |GPIO_CRH_CNF11_1 |GPIO_CRH_CNF12_1 |GPIO_CRH_CNF13_1 |GPIO_CRH_CNF14_1 |GPIO_CRH_CNF15_1);GPIOE->CRH &= ~(GPIO_CRH_CNF8_0 |GPIO_CRH_CNF9_0 |GPIO_CRH_CNF10_0 |GPIO_CRH_CNF11_0 |GPIO_CRH_CNF12_0 |GPIO_CRH_CNF13_0 |GPIO_CRH_CNF14_0 |GPIO_CRH_CNF15_0);/* 3 其他控制端口   复用推挽输出 *//* 3.1 PD4: 读控制引脚   PD5: 写控制引脚 */GPIOD->CRL |= (GPIO_CRL_MODE4 |GPIO_CRL_MODE5);GPIOD->CRL |= (GPIO_CRL_CNF4_1 |GPIO_CRL_CNF5_1);GPIOD->CRL &= ~(GPIO_CRL_CNF4_0 |GPIO_CRL_CNF5_0);/* 3.2   PG12:NE4*/GPIOG->CRH |= (GPIO_CRH_MODE12);GPIOG->CRH |= (GPIO_CRH_CNF12_1);GPIOG->CRH &= ~(GPIO_CRH_CNF12_0);/* 3.3   背光引脚PB0:通用推挽输出*/GPIOB->CRL |= GPIO_CRL_MODE0;GPIOB->CRL &= ~GPIO_CRL_CNF0;/* 3.4   重置引脚PG15:通用推挽输出*/GPIOG->CRH |= GPIO_CRH_MODE15;GPIOG->CRH &= ~GPIO_CRH_CNF15;
      }/*** @brief  初始化FSMC(Flexible Static Memory Controller)模块* * 此函数负责配置FSMC模块,使其能够与外部SRAM进行通信。它包括使能相关时钟、配置GPIO引脚模式、* 以及设置FSMC控制和刷新寄存器以满足SRAM的时序要求。*/
      void Driver_FSMC_Init(void)
      {/* 1 开启时钟 *//* 1.1 开启FSMC时钟 */RCC->AHBENR |= RCC_AHBENR_FSMCEN;/* 1.2 开启用到的 GPIO 时钟:PD PE PF PG */RCC->APB2ENR |= (RCC_APB2ENR_IOPDEN |RCC_APB2ENR_IOPBEN |RCC_APB2ENR_IOPEEN |RCC_APB2ENR_IOPFEN |RCC_APB2ENR_IOPGEN);/* 1.3 AFIO 时钟 */RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;/* 3 配置 FSMC 各个端口的输入输出模式 */Driver_FSMC_GPIO_Config();/* 4. 配置FSMC参数  *//* 4.1 存储器块使能 根据接线图可知是 Bank1的 3区   1区对应0 2区对应2 3区对应4 4区对应6  (BCR寄存器)*/FSMC_Bank1->BTCR[6] |= FSMC_BCR4_MBKEN;/* 4.2 设置存储器类型 00: SRAM ROM 01:PSRAM 10:NOR闪存*/FSMC_Bank1->BTCR[6] &= ~FSMC_BCR4_MTYP;/* 4.3 闪存访问使能: 禁止访问闪存 */FSMC_Bank1->BTCR[6] &= ~FSMC_BCR4_FACCEN;/* 4.4 地址和数据总线复用: 不复用 */FSMC_Bank1->BTCR[6] &= ~FSMC_BCR4_MUXEN;/* 4.5 数据总线宽度 00:8位 01:16位*/FSMC_Bank1->BTCR[6] &= ~FSMC_BCR4_MWID_1;FSMC_Bank1->BTCR[6] |= FSMC_BCR4_MWID_0;/* 4.6 写使能 */FSMC_Bank1->BTCR[6] |= FSMC_BCR4_WREN;/* 5. 配置SRAM的时序参数 BTCR[7] 访问bank1 4区对应的BTR寄存器 *//* 5.1 地址建立时间(时钟周期) 0:表示一个时钟周期。 对同步读写来说无效,永远是1个时钟周期*/FSMC_Bank1->BTCR[7] &= ~FSMC_BTR4_ADDSET;/* 5.2 地址保持时间(时钟周期) 对同步读写来说无效,永远是1个时钟周期*/FSMC_Bank1->BTCR[7] &= ~FSMC_BTR4_ADDHLD;/* 5.3 数据保持时间(时钟周期)数据在总线上的停留时间 */FSMC_Bank1->BTCR[7] &= ~FSMC_BTR4_DATAST; /* 对应的位置位0 */FSMC_Bank1->BTCR[7] |= (30 << 8);         /* 设置为1个us. 72个时钟周期 *//* 5.4 设置访问模式为A */FSMC_Bank1->BTCR[7] &= ~FSMC_BTR4_ACCMOD;
      }
      
  • Inf_LCD.c

    • #include "Inf_LCD.h"
      #include "Inf_Font.h"/* 初始化LCD */
      void Inf_LCD_Init(void)
      {/* 0. 初始化FSMC */Driver_FSMC_Init();// 1. 重置LCDInf_LCD_Reset();// 2. 开启背光Inf_LCD_BKOpen();// 3. 初始化寄存器Inf_LCD_RegConfig();
      }/* 读取lcd的id,用来测试通讯是否正常 */
      uint32_t Inf_LCD_ReadId(void)
      {uint32_t id = 0x0;Inf_LCD_WriteCmd(0x04);Inf_LCD_ReadData();             // 无用的数据,扔掉即可id |= Inf_LCD_ReadData() << 16; // 制造商idid |= Inf_LCD_ReadData() << 8;  // 模块/驱动版本号idid |= Inf_LCD_ReadData();       // 模块/驱动idreturn id;
      }/* 初始化寄存器的值 */
      void Inf_LCD_RegConfig(void)
      {/* 1. 设置灰阶电压以调整TFT面板的伽马特性, 正校准。一般出厂就设置好了 */Inf_LCD_WriteCmd(0xE0);Inf_LCD_WriteData(0x00);Inf_LCD_WriteData(0x07);Inf_LCD_WriteData(0x10);Inf_LCD_WriteData(0x09);Inf_LCD_WriteData(0x17);Inf_LCD_WriteData(0x0B);Inf_LCD_WriteData(0x41);Inf_LCD_WriteData(0x89);Inf_LCD_WriteData(0x4B);Inf_LCD_WriteData(0x0A);Inf_LCD_WriteData(0x0C);Inf_LCD_WriteData(0x0E);Inf_LCD_WriteData(0x18);Inf_LCD_WriteData(0x1B);Inf_LCD_WriteData(0x0F);/* 2. 设置灰阶电压以调整TFT面板的伽马特性,负校准 */Inf_LCD_WriteCmd(0XE1);Inf_LCD_WriteData(0x00);Inf_LCD_WriteData(0x17);Inf_LCD_WriteData(0x1A);Inf_LCD_WriteData(0x04);Inf_LCD_WriteData(0x0E);Inf_LCD_WriteData(0x06);Inf_LCD_WriteData(0x2F);Inf_LCD_WriteData(0x45);Inf_LCD_WriteData(0x43);Inf_LCD_WriteData(0x02);Inf_LCD_WriteData(0x0A);Inf_LCD_WriteData(0x09);Inf_LCD_WriteData(0x32);Inf_LCD_WriteData(0x36);Inf_LCD_WriteData(0x0F);/* 3.  Adjust Control 3 (F7h)  *//*LCD_WriteCmd(0XF7);Inf_LCD_WriteData(0xA9);Inf_LCD_WriteData(0x51);Inf_LCD_WriteData(0x2C);Inf_LCD_WriteData(0x82);*//* DSI write DCS command, use loose packet RGB 666 *//* 4. 电源控制1*/Inf_LCD_WriteCmd(0xC0);Inf_LCD_WriteData(0x11); /* 正伽马电压 */Inf_LCD_WriteData(0x09); /* 负伽马电压 *//* 5. 电源控制2 */Inf_LCD_WriteCmd(0xC1);Inf_LCD_WriteData(0x02);Inf_LCD_WriteData(0x03);/* 6. VCOM控制 */Inf_LCD_WriteCmd(0XC5);Inf_LCD_WriteData(0x00);Inf_LCD_WriteData(0x0A);Inf_LCD_WriteData(0x80);/* 7. Frame Rate Control (In Normal Mode/Full Colors) (B1h) */Inf_LCD_WriteCmd(0xB1);Inf_LCD_WriteData(0xB0);Inf_LCD_WriteData(0x11);/* 8.  Display Inversion Control (B4h) (正负电压反转,减少电磁干扰)*/Inf_LCD_WriteCmd(0xB4);Inf_LCD_WriteData(0x02);/* 9.  Display Function Control (B6h)  */Inf_LCD_WriteCmd(0xB6);Inf_LCD_WriteData(0x0A);Inf_LCD_WriteData(0xA2);/* 10. Entry Mode Set (B7h)  */Inf_LCD_WriteCmd(0xB7);Inf_LCD_WriteData(0xc6);/* 11. HS Lanes Control (BEh) */Inf_LCD_WriteCmd(0xBE);Inf_LCD_WriteData(0x00);Inf_LCD_WriteData(0x04);/* 12.  Interface Pixel Format (3Ah) */Inf_LCD_WriteCmd(0x3A);Inf_LCD_WriteData(0x55); /* 0x55 : 16 bits/pixel  *//* 13. Sleep Out (11h) 关闭休眠模式 */Inf_LCD_WriteCmd(0x11);/* 14. 设置屏幕方向和RGB */Inf_LCD_WriteCmd(0x36);Inf_LCD_WriteData(0x08);Delay_ms(120);/* 14. display on */Inf_LCD_WriteCmd(0x29);
      }/* 重置LCD PG15*/
      void Inf_LCD_Reset(void)
      {GPIOG->ODR &= ~GPIO_ODR_ODR15; // 低电平重置Delay_ms(50);GPIOG->ODR |= GPIO_ODR_ODR15; // 高电平正常Delay_ms(50);
      }/* 给LCD开启背光 */
      void Inf_LCD_BKOpen(void)
      {GPIOB->ODR |= GPIO_ODR_ODR0; // 高电平开启背光
      }
      /* 给LCD关闭背光 */
      void Inf_LCD_BKClose(void)
      {GPIOB->ODR &= ~GPIO_ODR_ODR0; // 低电平关闭背光(最暗)
      }/* 发送命令 */
      void Inf_LCD_WriteCmd(__IO uint16_t cmd)
      {*LCD_ADDR_CMD = cmd;
      }/* 发送数据 */
      void Inf_LCD_WriteData(__IO uint16_t data)
      {*LCD_ADDR_DATA = data;
      }/* 读取数据 */
      uint16_t Inf_LCD_ReadData(void)
      {return *LCD_ADDR_DATA;
      }/*** @description: 在LCD上显示一个Ascii字符* @param {uint16_t} x 起始x坐标* @param {uint16_t} y 起始y坐标* @param {uint8_t} c 要显示的字符* @param {uint16_t} fgColor 前景色:字符轮廓的颜色* @param {uint16_t} bgColor 背景色:非字符轮廓的颜色  比如白纸黑字:黑色是前景色 白色就是背景色* @param {uint8_t} fontHeight 字体高度 12|16|24|32*/
      void Inf_LCD_DisplayAsciiChar(uint16_t x,uint16_t y,uint8_t c,uint16_t fgColor,uint16_t bgColor,uint8_t fontHeight)
      {/* 1. 找到字符在字库中的位置 */uint8_t cPosition = c - ' ';/* 2. 设置要写入的LCD区域 */Inf_LCD_SetAddr(x, y, fontHeight >> 1, fontHeight);/* 3. 把字库数据写入到GRAM内存中 */Inf_LCD_WriteCmd(0x2C);uint8_t i, j, tmp, fontWidth = fontHeight >> 1;if (fontHeight == 12 || fontHeight == 16){for (i = 0; i < fontHeight; i++){// 一个字节控制着一行的8个像素。先低位再高位tmp = fontHeight == 12 ? ascii_1206[cPosition][i] : ascii_1608[cPosition][i];for (j = 0; j < fontWidth; j++){if (tmp & 0x01) // 如果是 1,则发送前景色{Inf_LCD_WriteData(fgColor);}else // 是0发送背景色{Inf_LCD_WriteData(bgColor);}tmp >>= 1; // 右移一位}}}else if (fontHeight == 24){for (i = 0; i < fontHeight << 1; i++){tmp = ascii_2412[cPosition][i];uint8_t jCount = i % 2 ? 4 : 8;for (j = 0; j < jCount; j++){if (tmp & 0x01) // 如果是 1,则发送前景色{Inf_LCD_WriteData(fgColor);}else // 是0发送背景色{Inf_LCD_WriteData(bgColor);}tmp >>= 1; // 右移一位}}}else if (fontHeight == 32){for (i = 0; i < fontHeight << 1; i++){tmp = ascii_3216[cPosition][i];for (j = 0; j < 8; j++){if (tmp & 0x01) // 如果是 1,则发送前景色{Inf_LCD_WriteData(fgColor);}else // 是0发送背景色{Inf_LCD_WriteData(bgColor);}tmp >>= 1; // 右移一位}}}
      }/*** @description: 显示一行英文字符串* @param {uint16_t} x* @param {uint16_t} y* @param {uint8_t} *str* @param {uint16_t} fgColor* @param {uint16_t} bgColor* @param {uint8_t} fontHeight* @return {*}*/
      void Inf_LCD_DisplayAsciiString(uint16_t x,uint16_t y,uint8_t *str,uint16_t fgColor,uint16_t bgColor,uint8_t fontHeight)
      {// 字体宽度uint8_t fontWidth = fontHeight >> 1;uint16_t i = 0;while (str[i] != '\0'){if (str[i] != '\n') // 如果不是换行符{if (x + fontWidth > 320) // 水平方向要显示的字符超出了屏幕, 则需要换行显示{y += fontHeight;x = 0;}Inf_LCD_DisplayAsciiChar(x, y, str[i], fgColor, bgColor, fontHeight);// 定义下一个字符的x坐标x += fontWidth;}else // 如果碰到换行符{y += fontHeight;x = 0;}i++;}
      }/*** @description: 显示中文字符* @param {uint16_t} x* @param {uint16_t} y* @param {uint8_t} chinesCharPosition* @param {uint16_t} fgColor* @param {uint16_t} bgColor* @return {*}*/
      void Inf_LCD_DisplayChinesChar(uint16_t x,uint16_t y,uint8_t chinesCharPosition,uint16_t fgColor,uint16_t bgColor)
      {/* 1. 设置要写入的LCD区域 中午字符一般宽高一样*/Inf_LCD_SetAddr(x, y, 32, 32);/* 3. 把字库数据写入到GRAM内存中 */Inf_LCD_WriteCmd(0x2C);uint8_t i, j, tmp;for (i = 0; i < 128; i++){tmp = chinese[chinesCharPosition][i];for (j = 0; j < 8; j++){if (tmp & 0x01) // 如果是 1,则发送前景色{Inf_LCD_WriteData(fgColor);}else // 是0发送背景色{Inf_LCD_WriteData(bgColor);}tmp >>= 1; // 右移一位}}
      }/*** @description: 设置要写入的GRAM的起始地址和结束地址。 默认坐标原点是 左上角* @param {uint16_t} x 起始x坐标* @param {uint16_t} y 起始y坐标* @param {uint16_t} w 区域宽* @param {uint16_t} h 区域高*/
      void Inf_LCD_SetAddr(uint16_t x,uint16_t y,uint16_t w,uint16_t h)
      {/* 设置x坐标(第几列) */Inf_LCD_WriteCmd(0x2A);/* 1. 起始列 */Inf_LCD_WriteData(x >> 8);   // 高8位Inf_LCD_WriteData(x & 0xFF); // 低8位/* 2. 结束列 */Inf_LCD_WriteData((x + w - 1) >> 8);Inf_LCD_WriteData((x + w - 1) & 0xFF);/* 设置y坐标(第行列) */Inf_LCD_WriteCmd(0x2B);/* 1. 起始行 */Inf_LCD_WriteData(y >> 8);   /* 高8位 */Inf_LCD_WriteData(y & 0xFF); /* 低8位 *//* 2. 结束行 */Inf_LCD_WriteData((y + h - 1) >> 8);   /* 高8位 */Inf_LCD_WriteData((y + h - 1) & 0xFF); /* 低8位 */
      }/*** @description: 读取显示像素格式*/
      uint16_t Inf_LCD_ReadDisplayPixelFormat(void)
      {Inf_LCD_WriteCmd(0x0C);Inf_LCD_ReadData();return Inf_LCD_ReadData();
      }/*** @description: 给LCD设置纯背景色* @return {*}*/
      void Inf_LCD_Clear(uint16_t color)
      {Inf_LCD_SetAddr(0, 0, 320, 480);Inf_LCD_FillColor(320 * 480, color);
      }/*** @description: 填充颜色* @param {uint32_t} num 填充的像素数* @param {uint16_t} color 填充的具体颜色* @return {*}*/
      void Inf_LCD_FillColor(uint32_t num, uint16_t color)
      {Inf_LCD_WriteCmd(0x2C);while (num--){Inf_LCD_WriteData(color);}
      }
      
  • Inf_LCD.h 

    • #ifndef __INF_LCD_H
      #define __INF_LCD_H#include "Driver_Usart1.h"
      #include "Com_Delay.h"
      #include "Driver_FSMC.h"#define SRAM_BANK4 0x6C000000
      #define LCD_AX 10                                                           // Inf_LCD的地址线,我们连接的时A10
      #define LCD_ADDR_CMD ((__IO uint16_t *)SRAM_BANK4)                          // 写命令地址
      #define LCD_ADDR_DATA ((__IO uint16_t *)(SRAM_BANK4 + (1 << (LCD_AX + 1)))) // 数据地址(计算地址的时候要左移一位)/* 常见颜色 */
      #define WHITE 0xFFFF
      #define BLACK 0x0000
      #define BLUE 0x001F
      #define BRED 0XF81F
      #define GRED 0XFFE0
      #define GBLUE 0X07FF
      #define RED 0xF800
      #define MAGENTA 0xF81F
      #define GREEN 0x07E0
      #define CYAN 0x7FFF
      #define YELLOW 0xFFE0
      #define BROWN 0XBC40 // 棕色
      #define BRRED 0XFC07 // 棕红色
      #define GRAY 0X8430  // 灰色void Inf_LCD_Init(void);
      uint32_t Inf_LCD_ReadId(void);
      void Inf_LCD_RegConfig(void);
      void Inf_LCD_Reset(void);
      void Inf_LCD_BKOpen(void);
      void Inf_LCD_BKClose(void);
      void Inf_LCD_WriteCmd(__IO uint16_t cmd);
      void Inf_LCD_WriteData(__IO uint16_t data);
      uint16_t Inf_LCD_ReadData(void);
      void Inf_LCD_DisplayAsciiChar(uint16_t x, uint16_t y, uint8_t c, uint16_t fgColor, uint16_t bgColor, uint8_t fontHeight);
      void Inf_LCD_DisplayAsciiString(uint16_t x, uint16_t y, uint8_t *str, uint16_t fgColor, uint16_t bgColor, uint8_t fontHeight);
      void Inf_LCD_DisplayChinesChar(uint16_t x, uint16_t y, uint8_t chinesCharPosition, uint16_t fgColor, uint16_t bgColor);
      void Inf_LCD_SetAddr(uint16_t x, uint16_t y, uint16_t w, uint16_t h);
      uint16_t Inf_LCD_ReadDisplayPixelFormat(void);
      void Inf_LCD_Clear(uint16_t color);
      void Inf_LCD_FillColor(uint32_t num, uint16_t color);
      #endif
      

ascii 字模 在最上方

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

最新免费商用无版权素材(免费图库 抠图 PNG 插画素材)

今天我要给大家揭秘几个私藏的宝藏网站——那些免费、商用无版权的素材资源站&#xff01;&#x1f389; 这些站点简直好用到爆炸&#x1f4a5;&#xff0c;每次需要找素材&#xff0c;它们总能秒速响应&#xff0c;让我们的工作效率直线飙升&#xff01;&#x1f680; 这里不…

32岁前端干了8年,是继续做前端开发,还是转其它工作_ui设计师转开发

前端发展有瓶颈&#xff0c;变来变去都是那一套&#xff0c;只是换了框架换了环境。换了框架后又得去学习&#xff0c;虽然很快上手&#xff0c;但是那些刚毕业的也很快上手了&#xff0c;入门门槛越来越低&#xff0c;想转行或继续卷&#xff0c;该如何破圈? 这是一位网友的自…

nmap 命令:网络扫描

一、命令简介 ​nmap​&#xff08;Network Mapper&#xff09;是一个开放源代码的网络探测和安全审核的工具。它最初由Fyodor Vaskovich开发&#xff0c;用于快速地扫描大型网络&#xff0c;尽管它同样适用于单个主机。 ​nmap​的功能包括&#xff1a; 发现主机上的开放端…

基于 BERT 的自定义中文命名实体识别实现

基于 BERT 的自定义中文命名实体识别实现 在自然语言处理中,命名实体识别(Named Entity Recognition,NER)是一项重要的任务,旨在识别文本中的特定实体,如人名、地名、组织机构名等。本文将介绍如何使用 BERT 模型实现自定义中文命名实体识别,并提供详细的代码分析和解读…

SpringBoot3自动配置(持续更新)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 自动配置 在SpringBoot中&#xff0c;自动配置是一个核心的特性&#xff0c;…

(done) 声音信号处理基础知识(1) (course overview)

来源&#xff1a;https://www.youtube.com/watch?viCwMQJnKk2c 声学处理应用场景如下 这个系列的内容包括如下&#xff1a; 作者的 slack 频道 油管主的 github repo: https://github.com/musikalkemist/AudioSignalProcessingForML

将PDF文件转换为音频播客、讲座和摘要PDF2Audio;Open WebUI Ollama的代码执行工具

✨ 1: PDF to Audio Converter PDF转音频转换器可以将PDF文件转换为音频播客、讲座和摘要&#xff0c;支持多种自定义选项。 PDF to Audio Converter 是一款强大的工具&#xff0c;能够将PDF文档转换为音频格式&#xff0c;例如播客、讲座和摘要等。该工具利用OpenAI的GPT模型…

5.MySQL表的约束

目录 表的约束空属性&#xff08;非空约束&#xff09;默认值&#xff08;default约束&#xff09;列描述&#xff08;comment&#xff09;zerofill主键&#xff08;primary key约束&#xff09;自增长&#xff08;auto_increment&#xff09;唯一键&#xff08;unique约束&…

Python酷玩之旅_mysql-connector

前言 Python作为数据科学、机器学习等领域的必选武器&#xff0c;备受各界人士的喜爱。当你面对不同类型、存储于各类介质的数据时&#xff0c;第一时间是不是要让它亮个相&#xff1f;做个统计&#xff0c;画个图表&#xff0c;搞个报表… 等等。 正如Java中的JdbcDriver一样…

高效驱动,掌控动力:TB67H400AFNG 马达驱动器

在如今智能设备和自动化应用领域中&#xff0c;驱动器的性能直接决定了系统的可靠性与效率。东芝的TB67H400AFNG有刷直流马达驱动器凭借其卓越的性能&#xff0c;成为众多行业解决方案中的关键部件。无论是工业控制、自动化设备还是消费类电子产品&#xff0c;TB67H400AFNG都能…

嵌入式综合实验平台-嵌入式综合实训实验箱

1、基本介绍 嵌入式综合实验平台&#xff08;eeLab-BaseKit&#xff09;是中智讯公司开发的一款信息类学科的综合型实验设备&#xff0c;配套丰富的教学实验和开发例程,可以满足电子信息工程专业的专业核心课程及专业方向课程的教学、实验和实训需求&#xff0c;包括《嵌入式接…

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer&#xff0c;是一种实时…

基于单片机的精确电压表DA-AD转换

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DAC0832和ADC0832检测电压&#xff0c;0到8.5V&#xff0c;设计复位电路 LED管显示实际稳压值&#xff0c;初始电压0 二、硬件资源 基于KEIL5编写C代码&#xff0c…

regPractice-正则表达式练习

正则表达式练习(java) 1 . 校验密码强度 密码的强度必须是包含大小写字母和数字的组合&#xff0c;不能使用特殊字符&#xff0c;长度在8-10之间。 ^(?.*\d)(?.*\[a-z])(?.*[A-Z])[a-zA-Z\d]{8,10}$**(?pattern)**属于正向前瞻断言 正向前瞻断言的语法是 (?pattern)&a…

【React与Vue】如何在页签中监听 LocalStorage 变化?这些方法你都试过吗?

在开发中&#xff0c;你是否会碰到过这样的需求&#xff1a;需要监听 LocalStorage 的变化。这在不同浏览器页签间是相对简单的&#xff0c;因为浏览器提供了内置的 storage 事件。但在同一个浏览器页签下&#xff0c;却没有直接的方式实现。今天&#xff0c;我们探讨下有几种高…

化工企业如何精准网络营销

合作咨询联系竑图 hongtu201988 网络推广已成为各行各业不可或缺的一部分&#xff0c;尤其是化工企业&#xff0c;其产品的专业性和复杂性更需要通过有效的网络推广手段来触达目标客户群体。以下是一份针对化工企业的网络推广方案&#xff0c;旨在通过多渠道的营销策略&#x…

【机器学习】---元强化学习

目录 1. 元学习简介1.1 什么是元学习&#xff1f;1.2 元学习的应用 2. 强化学习基础2.1 什么是强化学习&#xff1f;2.2 强化学习的基本框架2.3 深度强化学习 3. 元强化学习的概念与工作原理3.1 元强化学习是什么&#xff1f;3.2 元强化学习与普通强化学习的区别 4. 元强化学习…

Google 提供基于AI的模糊测试框架

人工智能驱动的 OSS-Fuzz 工具可以帮助发现漏洞&#xff0c;并与自动修补管道相结合。 模糊测试可以成为找出软件中零日漏洞的宝贵工具。为了鼓励开发人员和研究人员使用它&#xff0c;谷歌周三宣布&#xff0c;免费提供其模糊测试框架OSS-Fuzz。 根据谷歌的说法&#xff0c;通…

初学51单片机之I2C总线与E2PROM

首先先推荐B站的I2C相关的视频I2C入门第一节-I2C的基本工作原理_哔哩哔哩_bilibili 看完视频估计就大概知道怎么操作I2C了&#xff0c;他的LCD1602讲的也很不错&#xff0c;把数据建立tsp和数据保持thd&#xff0c;比喻成拍照时候的摆pose和按快门两个过程&#xff0c;感觉还是…