STM32F407 CAN1 CAN2

2023-11-18

注意CAN1可以单独使用,CAN2要开启CAN1时钟才能使用。

u8 CAN1_Mode_Init(u8 mode)
{
      GPIO_InitTypeDef GPIO_InitStructure; 
      CAN_InitTypeDef        CAN_InitStructure;
      CAN_FilterInitTypeDef  CAN_FilterInitStructure;
#if CAN1_RX0_INT_ENABLE 
       NVIC_InitTypeDef  NVIC_InitStructure;
#endif
    //使能相关时钟
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能PORTA时钟
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟
    
    //初始化GPIO
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11| GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA11,PA12
    
      //引脚复用映射配置
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_CAN1); //GPIOA11复用为CAN1
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_CAN1); //GPIOA12复用为CAN1
      
      //CAN单元设置
       CAN_InitStructure.CAN_TTCM=DISABLE;    //非时间触发通信模式
      CAN_InitStructure.CAN_ABOM=DISABLE;    //软件自动离线管理
      CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)
      CAN_InitStructure.CAN_NART=ENABLE;    //禁止报文自动传送
      CAN_InitStructure.CAN_RFLM=DISABLE;    //报文不锁定,新的覆盖旧的
      CAN_InitStructure.CAN_TXFP=DISABLE;    //优先级由报文标识符决�
     
/***************************************************************************************/        
    //配置can工作模式
      CAN_InitStructure.CAN_Mode= mode;     //模式设置
      CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;    //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq
      CAN_InitStructure.CAN_BS1=CAN_BS1_7tq; //时间段1的时间单元.  Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq
      CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; //时间段2的时间单元.  Tbs2范围CAN_BS2_1tq ~    CAN_BS2_8tq
      CAN_InitStructure.CAN_Prescaler=6;  //分频系数(Fdiv)为brp+1
/***************************************************************************************/            
      CAN_Init(CAN1, &CAN_InitStructure);   // 初始化CAN1
    
        //配置过滤器
       CAN_FilterInitStructure.CAN_FilterNumber=0;      //过滤器0
      CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 
      CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
      CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;32位ID
      CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
      CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
      CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
       CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
      CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0
      CAN_FilterInit(&CAN_FilterInitStructure);//滤波器初始化
        
#if CAN1_RX0_INT_ENABLE
    
      CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许.
  
      NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次优先级为0
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
#endif
    return 0;
}

#if CAN1_RX0_INT_ENABLE    //使能RX0中断
//中断服务函数
void CAN1_RX0_IRQHandler(void)
{
      CanRxMsg RxMessage;
    CAN_Receive(CAN1, 0, &RxMessage);
}
#endif



u8 CAN1_Send_Msg(u8* msg,u8 len)
{    
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12;     // 标准标识符为0
  TxMessage.ExtId=0x12;     // 设置扩展标示符(29位)
  TxMessage.IDE=0;           // 使用扩展标识符
  TxMessage.RTR=0;           // 消息类型为数据帧,一帧8位
  TxMessage.DLC=len;       // 发送两帧信息
  for(i=0;i<len;i++)
  TxMessage.Data[i]=msg[i];                 // 第一帧信息
  mbox= CAN_Transmit(CAN1, &TxMessage);   
  i=0;
  while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;    //等待发送结束
  if(i>=0XFFF)return 1;
  return 0;        
}



u8 CAN2_Mode_Init(u8 mode)
{
      GPIO_InitTypeDef GPIO_InitStructure; 
      CAN_InitTypeDef        CAN_InitStructure;
      CAN_FilterInitTypeDef  CAN_FilterInitStructure;
#if CAN2_RX0_INT_ENABLE 
       NVIC_InitTypeDef  NVIC_InitStructure;
#endif
    //ʹÄÜÏà¹ØʱÖÓ
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//ʹÄÜPORTAʱÖÓ                                                                    

      RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1|RCC_APB1Periph_CAN2, ENABLE); //ʹÓÃCAN2µÄʱºòҲҪʹÄÜCAN1ʱÖÓ    
    
    //³õʼ»¯GPIO
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12| GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜ
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//ÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
    GPIO_Init(GPIOB, &GPIO_InitStructure);//³õʼ»¯PA11,PA12
    
      //Òý½Å¸´ÓÃÓ³ÉäÅäÖÃ
      GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_CAN2); //GPIOA11¸´ÓÃΪCAN1
      GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_CAN2); //GPIOA12¸´ÓÃΪCAN1
      
//    CAN_DeInit(CAN2);
//    CAN_StructInit(&CAN_InitStructure);
      //CANµ¥ÔªÉèÖÃ
       CAN_InitStructure.CAN_TTCM=DISABLE;    //·Çʱ¼ä´¥·¢Í¨ÐÅģʽ   
      CAN_InitStructure.CAN_ABOM=DISABLE;    //Èí¼þ×Ô¶¯ÀëÏß¹ÜÀí      
      CAN_InitStructure.CAN_AWUM=DISABLE;//˯Ãßģʽͨ¹ýÈí¼þ»½ÐÑ(Çå³ýCAN->MCRµÄSLEEPλ)
      CAN_InitStructure.CAN_NART=ENABLE;    //½ûÖ¹±¨ÎÄ×Ô¶¯´«ËÍ 
      CAN_InitStructure.CAN_RFLM=DISABLE;    //±¨ÎIJ»Ëø¶¨,еĸ²¸Ç¾ÉµÄ  
      CAN_InitStructure.CAN_TXFP=DISABLE;    //ÓÅÏȼ¶Óɱ¨Îıêʶ·û¾ö¶¨ 
        
/***************************************************************************************/        
    //ÅäÖÃcan¹¤×÷ģʽ    
      CAN_InitStructure.CAN_Mode= mode;     //ģʽÉèÖà
      CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;    //ÖØÐÂͬ²½ÌøÔ¾¿í¶È(Tsjw)Ϊtsjw+1¸öʱ¼äµ¥Î» CAN_SJW_1tq~CAN_SJW_4tq
      CAN_InitStructure.CAN_BS1=CAN_BS1_7tq; //ʱ¼ä¶Î1µÄʱ¼äµ¥Ôª.  Tbs1·¶Î§CAN_BS1_1tq ~CAN_BS1_16tq
      CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; //ʱ¼ä¶Î2µÄʱ¼äµ¥Ôª.  Tbs2·¶Î§CAN_BS2_1tq ~    CAN_BS2_8tq
      CAN_InitStructure.CAN_Prescaler=6;  //·ÖƵϵÊý(Fdiv)Ϊbrp+1    42 /(1+7+6) *6 =0.5M
/***************************************************************************************/            
      CAN_Init(CAN2, &CAN_InitStructure);   // ³õʼ»¯CAN2 
    
        //ÅäÖùýÂËÆ÷
       CAN_FilterInitStructure.CAN_FilterNumber=14;      //¹ýÂËÆ÷0
      CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 
      CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ 
      CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;32λID
      CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
      CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32λMASK
      CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
       CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0
      CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0
      CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯
        
#if CAN2_RX0_INT_ENABLE

    /* OPEN Reception IT */
    CAN_ITConfig(CAN2, CAN_IT_TME,  ENABLE);
    CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);
    CAN_ITConfig(CAN2, CAN_IT_EWG, ENABLE);
    CAN_ITConfig(CAN2, CAN_IT_EPV, ENABLE);
    CAN_ITConfig(CAN2, CAN_IT_BOF, ENABLE);
    CAN_ITConfig(CAN2, CAN_IT_LEC, ENABLE);
    CAN_ITConfig(CAN2, CAN_IT_ERR, ENABLE);      

    /* receive */
    NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    NVIC_InitStructure.NVIC_IRQChannel = CAN2_SCE_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    BSP_IntVectSet(BSP_INT_ID_CAN2_RX1,CAN2_RX1_IRQHandler);
    BSP_IntEn(BSP_INT_ID_CAN2_RX1);
    

    BSP_IntVectSet(BSP_INT_ID_CAN2_SCE,CAN2_SCE_IRQHandler);
    BSP_IntEn(BSP_INT_ID_CAN2_SCE);

    BSP_IntVectSet(BSP_INT_ID_CAN2_TX,CAN2_TX_IRQHandler);
    BSP_IntEn(BSP_INT_ID_CAN2_TX);

#endif
    return 0;
}   



#if CAN2_RX0_INT_ENABLE    //ʹÄÜRX0ÖжÏ
//ÖжϷþÎñº¯Êý                
void CAN2_RX0_IRQHandler(void)
{
      CanRxMsg RxMessage;
    CAN_Receive(CAN2, 0, &RxMessage);
    
     uart1SendChars((u8 *)&RxMessage,sizeof(RxMessage)); 
}
#endif

u8 CAN2_Send_Msg(u8* msg,u8 len)
{    
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12;     // ±ê×¼±êʶ·ûΪ0
  TxMessage.ExtId=0x12;     // ÉèÖÃÀ©Õ¹±êʾ·û£¨29룩
  TxMessage.IDE=0;          // ʹÓÃÀ©Õ¹±êʶ·û
  TxMessage.RTR=0;          // ÏûÏ¢ÀàÐÍΪÊý¾ÝÖ¡£¬Ò»Ö¡8λ
  TxMessage.DLC=len;                             // ·¢ËÍÁ½Ö¡ÐÅÏ¢
  for(i=0;i<len;i++)
  TxMessage.Data[i]=msg[i];                 // µÚÒ»Ö¡ÐÅÏ¢          
  mbox= CAN_Transmit(CAN2, &TxMessage);   
  i=0;
  while((CAN_TransmitStatus(CAN2, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;    //µÈ´ý·¢ËͽáÊø
  if(i>=0XFFF)return 1;
  return 0;        
}

void CAN2_SCE_IRQHandler(void)
{

    if(CAN_GetITStatus(CAN2,CAN_IT_EWG))
    {
        CAN_ClearITPendingBit(CAN2,CAN_IT_EWG);
   //     DEBUG_PRINTF("EWG\r\n");
    }

    if(CAN_GetITStatus(CAN2,CAN_IT_EPV))
    {
        CAN_ClearITPendingBit(CAN2,CAN_IT_EPV);
    //    DEBUG_PRINTF("EPV\r\n");
    }

    if(CAN_GetITStatus(CAN2,CAN_IT_BOF))
    {
        CAN_ClearITPendingBit(CAN2,CAN_IT_BOF);
     //   DEBUG_PRINTF("BOF\r\n");
    }
    //CAN2->MCR

    if(CAN_GetITStatus(CAN2,CAN_IT_LEC))
    {
        CAN_ClearITPendingBit(CAN2,CAN_IT_LEC);
     //   DEBUG_PRINTF("LEC\r\n");
    }

    if(CAN_GetITStatus(CAN2,CAN_IT_ERR))
    {
        CAN_ClearITPendingBit(CAN2,CAN_IT_ERR);
      //  DEBUG_PRINTF("ERR\r\n");
    }
   
}

 

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

STM32F407 CAN1 CAN2 的相关文章

  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • C语言—每日选择题—Day54

    第一题 1 存在int类型变量x y z 其对应值为x 0x59 y 0x39 z 0x6E 则x y z的值为 A 1 0010 0111 0011 B 1 0100 0011 1111 C 1 0010 0111 0111 D 1 01
  • 华为OD机试真题-部门人力分配-2023年OD统一考试(C卷)

    题目描述 部门在进行需求开发时需要进行人力安排 当前部门需要完成N个需求 需求用requirements 表示 requirements i 表示第i个需求的工作量大小 单位 人月 这部分需求需要在M个月内完成开发 进行人力安排后每个月的人
  • 串口流控(CTS/RTS)使用详解

    1 流控概念 在两个设备正常通信时 由于处理速度不同 就存在这样一个问题 有的快 有的慢 在某些情况下 就可能导致丢失数据的情况 如台式机与单片机之间的通讯 接收端数据缓冲区已满 则此时继续发送来的数据就会丢失 流控制能解决这个问题 当接收
  • linux ARM64 处理器内存屏障

    一 内存类型 ARMv8架构将系统中所有的内存 按照它们的特性 划分成两种 即普通内存和设备内存 并且它们是互斥的 也就是说系统中的某段内存要么是普通内存 要么是设备内存 不能都是 1 普通内存 Normal Memory 普通内存的特性是
  • 串口流控(CTS/RTS)使用详解

    1 流控概念 在两个设备正常通信时 由于处理速度不同 就存在这样一个问题 有的快 有的慢 在某些情况下 就可能导致丢失数据的情况 如台式机与单片机之间的通讯 接收端数据缓冲区已满 则此时继续发送来的数据就会丢失 流控制能解决这个问题 当接收
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • BMS开发之面向对象思想(adbms1818)

    借鉴adbms1818的底层驱动代码 前言 adbms1818的主要用途就是不同种类的寄存器里面存储不同的数据 程序员需要通过特定的协议往寄存器里面写入或者读出数据 1 定义一个结构体 里面存储了adbms1818的所有寄存器的信息 然后我
  • CMake 教程

    这篇文章主要介绍 CMake 的使用 看完这篇文章后 CMake 的绝大多数使用方法你都能掌握 本篇文章采用循序渐进的方法带你一步步逐渐进阶 CMake 通过多个示例 告诉你如何使用 CMake 解决常见的构建系统问题 各位爱学习的朋友 收
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 锂电池管理系统(BMS)

    引言 在现代科技的推动下 锂电池已经成为各种电动设备和能源存储系统的首选能源媒介 然而 锂电池在充电和放电过程中存在一系列潜在的安全隐患 同时其性能和寿命也受到一些限制 为了解决这些问题 锂电池管理系统 BMS 应运而生 BMS不仅仅是一个
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 华为OD机试真题-围棋的气-2023年OD统一考试(C卷)

    题目描述 围棋棋盘由纵横各19条线垂直相交组成 棋盘上一共19x19 361个交点 对弈双方一方执白棋 一方执黑棋 落子时只能将棋子置于交点上 气 是围棋中很重要的一个概念 某个棋子有几口气 是指其上下左右方向四个相邻的交叉点中 有几个交叉
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 带头双向循环链表基础

    带头双向循环链表基础 销毁 销毁 void ListDestory ListNode phead void ListDestory ListNode phead assert phead ListNode cur phead gt next
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE

随机推荐

  • win10 的图标丢失了怎么办?

    情况说明 几分钟前 自己手贱 居然一不小心把那D盘的分区表给删了 虽然说是借助DiskGenius即使找了回来 但是一个尴尬的情况出现了 原来装在D盘的程序虽然可以用 但是图标却没了 这对于有强迫症的我来说 让我浑身不舒服 解决方案 首先
  • java读取Excel —— XSSFWorkbook 找不到该类

    做一个Excel表格的读取时导入 org apache poi 包后居然提示 XSSFWorkbook 找不到 原来是还需要下载一个jar包 poi ooxml 包 之后在引入相关类即可 import org apache poi xssf
  • Window XP驱动开发(二十四) 电源管理

    转载自 http blog csdn net xxxluozhen article details 5023703 一 电源管理 1 WDM电源管理模型 在Windows 2000和Windows 98中 操作系统接管了大部分电源管理工作
  • (数据结构)1.实现图的邻接矩阵和邻接表的存储 2.实现图的遍历算法

    实验内容 1 编写一个程序graph cpp 设计带权图的邻接矩阵与邻接表的创建和输出运算 并在此基础上设计一个主程序exp8 1 cpp完成以下功能 1 建立如图8 54所示的有向图G的邻接矩阵 并输出之 2 建立如图8 54所示的有向图
  • 力扣:70. 爬楼梯

    假设你正在爬楼梯 需要 n 阶你才能到达楼顶 每次你可以爬 1 或 2 个台阶 你有多少种不同的方法可以爬到楼顶呢 示例 1 输入 n 2 输出 2 解释 有两种方法可以爬到楼顶 1 1 阶 1 阶 2 2 阶 示例 2 输入 n 3 输出
  • Boot与APP的Hex合并

    软件准备 使用的软件是srec cat软件 下载地址 合并脚本编写 ECHO OFF 如果存在上一次的hex文件就删除 if exist BootJoinAPP CCP APP hex del BootJoinAPP CCP APP hex
  • C# 远程唤醒(远程开机)

    C 远程唤醒 远程开机 近日 小白要用到远程开机的功能 网上大多介绍的是Magic Packet的工具 实际上 此Magic Packet是AMD公司开发的 请在google cn中搜索Magic Packet Technology 原理上
  • Mysql递归查询

    SELECT IFNULL CONCAT GROUP CONCAT CONCAT catId t id catName t name ch catLevel t level AS companyCategories FROM SELECT
  • 微服务实践--微服务方法论00

    思想 在接收到一个新的新项目时 架构师的职责是建立项目的业务与技术实现之间的桥梁 在翻译业务到技术实现的过程中需要进行业务建模 技术设计等方面的工作 业务建模和技术设计过程中都有各自领域的知识体系 基本上每个知识体系都是由上层的理论 概念和
  • python判断素数的函数_python判断是否为素数

    质数 prime number 又称素数 指在一个大于1的自然数中 除了1和此整数自身外 不能被其他自然数整除的数 素数在数论中有着很重要的地位 比1大但不是素数的数称为合数 1和0既非素数也非合数 素数是与合数相对立的两个概念 二者构成了
  • C++实现栈的顺序存储与链式存储

    栈是一种特殊的数据结构 栈中数据先进后出 且栈中数据只能从头部出栈 能直接访问的数据也仅为栈的头部数据 要想访问下面的数据则需要将前面的数据逐个出栈后才可访问 下面通过一个word撤销的案例来解释 我们用word写paper时 首先需要创建
  • 国内首部

    当前 税务和发票等财税数据作为财务关联性强 欺诈难度大 覆盖率最高的优质数据 正成为数字普惠金融不可或缺的 硬核 力量 全面提升相关数据理论与实战能力正逢其时 8月8日 在金蝶2023年全球创见者大会 企业数字信用平行论坛 现场 金蝶征信
  • java使用MD5生成摘要

    对value进行hash处理 return hash处理结果 public static String digest String input int length 32 try MessageDigest md MessageDigest
  • openGL之API学习(六十八)core profile、compatibility profile、forward compatibility

    在OpenGL的发展历程中 总是兼顾向下兼容的特性 但是到了一定的程度之后 这些旧有的OpenGL API不再适应时代的需要 还有一些扩展并不是驱动一定要实现的扩展 这些被统一划入可选的Compatibility Profile 而由Ope
  • 信号的时域相位、频域相位

    文章目录 傅里叶变换的时移性质 matlab代码 单点频信号 线调信号 时域相位 频域相位 傅里叶变换的时移性质 信号增加线性相位时 是所有的频率分量对应的相位都有变化 matlab代码 清空一切 clc clear all close a
  • 翻译:《实用的Python编程》01_07_Functions

    目录 上一节 1 6 文件 下一节 2 0 处理数据 1 7 函数 随着程序开始变大 我们会想要有条理地组织这些程序 本节简要介绍函数 库模块以及带有异常的错误处理 自定义函数 对你要重用的代码使用函数 下面是函数的定义方式 def sum
  • 数据结构--图的学习(基础概念)

    目录 图的定义 图的逻辑结构应用 无向图 有向图 编辑 简单图 多重图 顶点的度 入读 出度 顶点 顶点的关系描述 连通图和强连通图 子图 1 无向图的子图 编辑 2 有向图的子图 连通分量 强连通分量 生成树 生成森林 边的权 带权图 网
  • 2014年3月7日星期五(DEMO8-4,实体三角形着色)

    这个例子比较大 任重而道远 理论草草看了下 光记住索引和RGB各项求最小距离了 为简单起见 拷贝7 6过来 并把8 3封装到的引擎代码拷贝替换 逐行来看 各个击破 先换成800 600视口 define SCREEN WIDTH 800 d
  • mysql之基础查询,条件查询测试题07

    1 基础查询 条件查询测试题 看图 结果 1 SELECT salary last name FROM employees WHERE commission pct IS NULL AND salary lt 18000 2 SELECT
  • STM32F407 CAN1 CAN2

    注意CAN1可以单独使用 CAN2要开启CAN1时钟才能使用 u8 CAN1 Mode Init u8 mode GPIO InitTypeDef GPIO InitStructure CAN InitTypeDef CAN InitStr