RCC: Reset and clock control 复位和时钟控制

时钟树


在STM32中文参考手册中6.2时钟中的时钟树图

HSE时钟

HSE:High Speed External Clock signal,即高速的外部时钟。
来源:无源晶振(4-16M),通常使用8M。(正点用的也是8M)

外部晶体/陶瓷谐振器(HSE晶体)
4~16Mz外部振荡器可为系统提供更为精确的主时钟。相关的硬件配置可参考图9,进一步信息可参考数据手册的电气特性部分。
在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置’1’,时钟才被释放出来。如果在时钟中断寄存器RCC_CIR中允许产生中断,将会产生相应中断。
HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。

HSI时钟

HSI:High Speed Internal Clock signal,高速的内部时钟。
来源:芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。

配置时钟

先找到OSC_OUT、OSC_IN ,我的板子得到HSE OSC很明显是8MHz,找到PLLXTPRE


需要配置为0,即HSE不分频,HSE频率还是8MHz。
找到PLLSRC

配置为1,即HSE时钟作为PLL输入时钟,HSE频率还是8MHz。
找到PLLMUL

配置为0111,即PLL 9倍频输出,这时的频率已经变成了72MHz。
找到SW

配置为10,即PLL输出作为系统时钟。
这时的SYSCLK频率是72MHz。
由于时钟配置需要时间,所以需要通过SWS来检测是否已经切换完毕。

当读取为10时,就表示配置成功了。

下面配置AHB时钟频率

配置为0xxx,即不分频,72MHz。

HCLK时钟
HCLK:AHB高速总线时钟,速度最高为72M。为AHB总线的外设提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核提供时钟(FCLK)。
AHB:advanced high-performance bus。

下面配置APB1时钟频率

注意:APB1时钟频率最高只能配置为36MHz,所以我只能配置为100,即二分频,36MHz。
PCLK1时钟
PCLK1:APB1低速总线时钟,最高为36M。为APB1总线的外设提供时钟。2倍频之后则为APB1总线的定时器2-7提供时钟,最大为72M。

下面配置APB2时钟频率

APB2没有限制,配置为0xx,即不分频,72MHz。
PCLK2时钟
PCLK2:APB2高速总线时钟,最高为72M。为APB1总线的外设提供时钟。为APB1总线的定时器1和8提供时钟,最大为72M。

定时器2~7时钟频率

我APB1预分频系数设置为2,36MHz,TIMXCLK要将36MHz*2,即TIMXCLK为72MHz。

定时器1、8时钟频率

我APB2预分频系数设置为1,72MHz,TIMXCLK频率不变,即TIMXCLK为72MHz。

ADC时钟频率

ADCCLK最大14MHz,APB2时钟频率为72MHz,所以ADC分频器要选择/6,即ADCCLK为72/6=12MHz。

RTC时钟

RTC时钟:为芯片内部的RTC外设提供时钟。
来源:HSE_RTC(HSE分频得到)、LSE(外部32.768KHZ的晶体提供,通常选择这个)、LSI(32KHZ)。

MCO

MCO:microcontroller clock output,微控制器时钟输出引脚,由PA8复用所得。


配置PCC_CFGR:MCO

CSS

CSSI使能了:如果HSE时钟发生故障, HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和
TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到Cortex™-M3的NMI中断(不可屏蔽中断)。

刹车输入端

营救操作:可以紧急保存一些重要数据、开机重启、切换到HSI时钟(在PLLSRC时配置为HSI的8MHz/2,PLLMUL选择*16,SYSCLK64MHz,一些外设仍然可以工作)、

CSSI没有使能:如果HSE振荡器被直接或间接地作为系统时钟, (间接的意思是:它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟, PLL也将被关闭。这时,SYSCLK直接用HSI的8MHz。

系统时钟配置函数

static void SetSysClockTo72(void)
{__IO uint32_t StartUpCounter = 0, HSEStatus = 0;/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    /* Enable HSE */    RCC->CR |= ((uint32_t)RCC_CR_HSEON);/* Wait till HSE is ready and if Time out is reached exit */do{HSEStatus = RCC->CR & RCC_CR_HSERDY;StartUpCounter++;  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));if ((RCC->CR & RCC_CR_HSERDY) != RESET){HSEStatus = (uint32_t)0x01;}else{HSEStatus = (uint32_t)0x00;}if (HSEStatus == (uint32_t)0x01){/* Enable Prefetch Buffer */FLASH->ACR |= FLASH_ACR_PRFTBE;/* Flash 2 wait state */FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    /* HCLK = SYSCLK */RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;/* PCLK2 = HCLK */RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;/* PCLK1 = HCLK */RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;#ifdef STM32F10X_CL/* Configure PLLs ------------------------------------------------------*//* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz *//* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);/* Enable PLL2 */RCC->CR |= RCC_CR_PLL2ON;/* Wait till PLL2 is ready */while((RCC->CR & RCC_CR_PLL2RDY) == 0){}/* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL9);
#else    /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |RCC_CFGR_PLLMULL));RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
#endif /* STM32F10X_CL *//* Enable PLL */RCC->CR |= RCC_CR_PLLON;/* Wait till PLL is ready */while((RCC->CR & RCC_CR_PLLRDY) == 0){}/* Select PLL as system clock source */RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    /* Wait till PLL is used as system clock source */while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08){}}else{ /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */}
}
#endif
static void SetSysClockTo72(void)
{__IO uint32_t StartUpCounter = 0, HSEStatus = 0;/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    /* 使能 HSE */    RCC->CR |= ((uint32_t)RCC_CR_HSEON);/* 等待HSE准备完毕,并且如果超时就退出 */do{HSEStatus = RCC->CR & RCC_CR_HSERDY;StartUpCounter++;  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));/* 如果HSE准备好 */if ((RCC->CR & RCC_CR_HSERDY) != RESET){HSEStatus = (uint32_t)0x01;}/* 如果超时 */else{HSEStatus = (uint32_t)0x00;}
/* 如果HSE准备好 */if (HSEStatus == (uint32_t)0x01){/* Enable Prefetch Buffer *//*预取缓冲区开启*/FLASH->ACR |= FLASH_ACR_PRFTBE;/* Flash 2 wait state *//*时延:两个等待状态*/FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    /* HCLK = SYSCLK  HCLK等于72MHz*/RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;/* PCLK2 = HCLK  PCLK2等于72MHz*/RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;/* PCLK1 = HCLK/2 二分频  PCLK1等于36MHz*/RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
/* 我用的是大容量 STM32F10X_HD ,这部分跳过*/
#ifdef STM32F10X_CL/* Configure PLLs ------------------------------------------------------*//* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz *//* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);/* Enable PLL2 */RCC->CR |= RCC_CR_PLL2ON;/* Wait till PLL2 is ready */while((RCC->CR & RCC_CR_PLL2RDY) == 0){}/* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL9);
#else    /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz *//* PLLXTPRE=HSE PLLSRC=PLLXTPRE=HSE PLLMUL:*9->PLLCLK=72MHz *//*先把这些位清零*/RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |RCC_CFGR_PLLMULL));/*再开始设置*/RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
#endif /* STM32F10X_CL *//* Enable PLL *//*PLL使能*/RCC->CR |= RCC_CR_PLLON;/* Wait till PLL is ready *//*在PLL未锁定的时候一直等待*/while((RCC->CR & RCC_CR_PLLRDY) == 0){}/* Select PLL as system clock source *//*PLL输出作为系统时钟*/RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    /* Wait till PLL is used as system clock source *//*等待到PLL输出作为系统时钟*/while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08){}}else{/*如果HSE使能没有成功,可以在这里添加处理HSE没使能成功的代码*//* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */}
}
#endif

中间的FLASH设置部分需要用到STM32F10xxx闪存编程手册。

顺序:

  1. 使能HSE
  2. 等待HSE准备完毕,并且如果超时就退出
  3. 如果HSE准备好
  4. 预取缓冲区开启
  5. 时延:两个等待状态
  6. 配置AHB、APB1、APB2预分频器
  7. 配置PLLCLK频率为72MHz
  8. PLL使能
  9. PLL输出作为系统时钟

使用HSE配置系统时钟并用MCO输出监控系统时钟

rccclkconfig.h

#ifndef __RCCCLKCONFIG_H
#define __RCCCLKCONFIG_H
#include "stm32f10x.h"void HSE_SetSysClk(uint32_t RCC_PLLMul_x);
void MCO_GPIO_Config(void);
#endif /*__RCCCLKCONFIG_H*/

rccclkconfig.c

#include "rccclkconfig.h"
/*** @brief  HSE配置函数* @param  RCC_PLLMul_x:系统时钟频率为x*8MHz* @retval 无*/
void HSE_SetSysClk(uint32_t RCC_PLLMul_x)
{ErrorStatus HSEStatus;RCC_DeInit();//RCC寄存器复位RCC_HSEConfig(RCC_HSE_ON);//使能HSEHSEStatus=RCC_WaitForHSEStartUp();//等待HSE准备完毕if(HSEStatus==SUCCESS){FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//预取缓冲区开启FLASH_SetLatency(FLASH_Latency_2);//时延:两个等待状态RCC_HCLKConfig(RCC_SYSCLK_Div1);// 配置AHB、APB1、APB2预分频器RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_x);//配置PLLCLK频率RCC_PLLCmd(ENABLE);//使能PLLwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//等待PLL时钟稳定RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//使用PLLCLK作为系统时钟while(RCC_GetSYSCLKSource()!=0x08);//等待PLLCLK作为时钟系统稳定}else{/*如果HSE使能没有成功,可以在这里添加处理HSE没使能成功的代码*/}
}/*** @brief  MCO引脚配置函数* @param  无* @retval 无*/void MCO_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//在数据手册中可以看到MCO的引脚是PA8GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);}

main.c

#include "stm32f10x.h"
#include "rccclkconfig.h"
#include "led.h"
#include "sys.h"
#include "gpio.h"/*** @brief  随便写的用来占用系统资源的延时函数* @param  时间?* @retval 无*/
void Delay(uint32_t count)
{u32 i=100;for(;i!=0;i--){for(;count!=0;count--);}
}int main(void)
{HSE_SetSysClk(RCC_PLLMul_2);//系统时钟频率为x*8MHz 通过这个这个可以调整LED闪烁的时间间隔和MCO输出的频率MCO_GPIO_Config();//MCO引脚配置RCC_MCOConfig(RCC_MCO_SYSCLK);//MCO引脚输出SYSCLKLED_GPIO_Config();//LEDGPIO配置while(1){Delay(0xffffff);LED_1_ON;Delay(0xffffff);LED_1_OFF;}
}

通过调整HSE_SetSysClk(RCC_PLLMul_x);里面的x(2~16),就可以调节系统的时钟频率,可以通过示波器测MCO来检测它的频率。

这是x=2,即系统时钟为16MHz时,示波器显示的波形,右上角可以看出它的频率为16MHz

使用HSI配置系统时钟并用MCO输出监控系统时钟

rccclkconfig.h
#ifndef __RCCCLKCONFIG_H
#define __RCCCLKCONFIG_H
#include "stm32f10x.h"void HSI_SetSysClk(uint32_t RCC_PLLMul_x);
void MCO_GPIO_Config(void);
#endif /*__RCCCLKCONFIG_H*/
rccclkconfig.c
#include "rccclkconfig.h"void HSI_SetSysClk(uint32_t RCC_PLLMul_x)
{__IO uint32_t HSIStatus=0;//使能HSERCC_HSICmd(ENABLE);//等待HSE准备完毕HSIStatus=RCC->CR&RCC_CR_HSIRDY;if(HSIStatus==RCC_CR_HSIRDY){//预取缓冲区开启FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//时延:两个等待状态FLASH_SetLatency(FLASH_Latency_2);// 配置AHB、APB1、APB2预分频器RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);//配置PLLCLK频率为72MHzRCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_x);//使能PLLRCC_PLLCmd(ENABLE);//等待PLL时钟稳定while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//使用PLLCLK作为系统时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//等待PLLCLK作为时钟系统稳定while(RCC_GetSYSCLKSource()!=0x08);}else{/*如果HSI使能没有成功,可以在这里添加处理HSE没使能成功的代码*/}
}void MCO_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);}
#include "stm32f10x.h"
#include "bsp_led.h"
#include "rccclkconfig.h"
void Delay(uint32_t count)
{u32 i=100;for(;i!=0;i--){for(;count!=0;count--);}}
int main(void)
{//来到这时,系统时钟为72MHzRCC_DeInit();//RCC寄存器复位HSI_SetSysClk(RCC_PLLMul_2);MCO_GPIO_Config();RCC_MCOConfig(RCC_MCO_SYSCLK);LED_GPIO_Config();while(1){LED_0(OFF);Delay(0xffffff);LED_0(ON);Delay(0xffffff);        }}


这是我配置为8MHz的MCO输出的波形,右上角的频率为8.02873MHz。

STM32入门(十二)----RCC相关推荐

  1. 网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!

    本文中文译文由作者"ably.io"发布于公众号"高可用架构",译文原题:<深入解读HTTP3的原理及应用>.英文原题:<HTTP/3 dee ...

  2. IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<上网慢?经常掉线?这篇文章告诉你该怎么办!>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注 ...

  3. Android入门(十二)SQLite事务、升级数据库

    原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...

  4. STM32入门(二十)----DAC

    DAC 理论 数模转换DAC原理 STM32的DAC的特点 框图 常用寄存器 常用库函数 实践 PWMDAC 理论 数模转换DAC原理 STM32的DAC模块(数字/模拟转换模块)是12位数字输入,电 ...

  5. STM32入门(二十五)----高级定时器

    高级定时器 定时器 高级定时器 高级定时器GPIO 高级定时器功能框图 时钟源 内部时钟源 外部时钟1 外部时钟2 内部触发输入 内部触发连接 TIM1为TIM2提供时钟 控制器 时基单元 预分频器 ...

  6. 【FPGA入门十二】1bit全加器实现计算8位二进制数中1的个数

    文章目录 一.实验任务 二.设计思路 三.代码实现 ①设计按键消抖模块 ②设计按键输入8bit二进制数 ③设计计算8bit二进制数中1的个数模块 ④设计数码管显示模块 ⑤顶层模块 ⑥设计仿真文件 ⑦仿 ...

  7. STM32 (十二) I2C

    一.简介 IIC 简介 IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备.多用于主控制器和从器件间 ...

  8. [WebGL入门]十二,模型数据和顶点属性

    注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:].另外.鄙人webgl研究还不够深入,一些专业词语.假设翻译有误.欢迎大家指 ...

  9. 序列(sequence)(Python入门十二)

    序列(sequence) - 序列是Python中最基本的一种数据结构     - 数据结构指计算机中数据存储的方式     - 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索 ...

  10. (转)tensorflow入门教程(二十六)人脸识别(上)

    https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...

最新文章

  1. 搜索算法,一触即达:GitHub上有个规模最大的开源算法库
  2. R语言ggplot2可视化柱状图并自定义柱体的宽度(通过变量指定条形的宽度)实战、条形图并自定义条形的宽度实战
  3. python实现选择排序
  4. C语言scanf fgets,C语言中输入函数(scanf()、fgets()和gets())的区别详解
  5. 这款Python王者编辑器,集Pycharm和Sublime优点于一身
  6. 昨天,腾讯百万节点规模管控系统(TSC)诞生了!
  7. catv系统主要有哪三部分组成_光纤放大器在DWDM传输系统中的应用
  8. java1.8 lambda表达式_java1.8之Lambda表达式
  9. android退出图标按钮,android-setCloseButtonIcon(位图可绘制)不适用于...
  10. one hot 编码的实现
  11. Win7英伟达控制面板点击没有反应的解决办法
  12. PHP表格数据Excel转图片输出通用方法,列可自动拓展
  13. 题解 P2212 【[USACO14MAR]浇地Watering the Fields】
  14. 工厂模式之抽象工厂模式
  15. 用nohup命令让Linux下程序永远在后台执行--zz牧云IT生活
  16. paypal简单分享
  17. puber們這一季的愛情啊
  18. 【百科】详解阿里云技术核心——飞天
  19. ubuntu14.04安裝chromium浏览器的Flash播放插件
  20. Java中级开发笔试题及答案,最全指南

热门文章

  1. linux系统安装 ubuntu error symbol‘grub_calloc’not found
  2. 【配送路径规划】蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
  3. python numpy.ndarray中的数据转为int型
  4. Java数据类型和运算符
  5. The following packages have unmet dependencies问题解决
  6. SVN之enable-auto-props自动化属性
  7. 第三方微信+支付宝个人免签支付源码
  8. python -不敢表白,不好意思说出来,没关系,7行代码完成自动打印文字
  9. ios中用AFN做https
  10. 学习项目管理理论后的体会