【STM32】STM32之timer1产生PWM(互补通道)

2023-11-14

本篇博文最后修改时间:2017年01月14日,23:50。


一、简介

本文介绍STM32系列如何使用timer1的第TIM1_CH2N通道(PB14)产生PWM。


二、实验平台

库版本:STM32F10x_StdPeriph_Lib_V3.5.0

编译软件:MDK4.53

硬件平台:STM32开发板(主芯片stm32f103c8t6)

仿真器:JLINK


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、 实验前提
1、在进行本文步骤前,请先 阅读 以下博文:
1)《STM32之timer3产生PWM》:http://blog.csdn.net/feilusia/article/details/53634882
2、在进行本文步骤前,请先 实现以下博文:
暂无


五、基础知识

1、什么是互补通道?
答: TIM1_CH2N 通道就是TIM1_CH2的互补通道,它们的波形完全反向。有些引脚上是互补通道,我们同样可用于PWM输出。

六、实验步骤

1、编写并添加PWM驱动

1)编写驱动GUA_Timer1_PWM.c(存放在“……\HARDWARE”)

//******************************************************************************                            
//name:             GUA_Timer1_PWM.c               
//introduce:        定时器1的PWM驱动        
//author:           甜甜的大香瓜                     
//email:            897503845@qq.com         
//QQ group          香瓜单片机之STM8/STM32(164311667)                      
//changetime:       2017.01.14      
//******************************************************************************    
#include "stm32f10x.h" 
#include "GUA_Timer1_PWM.h"  
  
/*********************宏定义************************/    
//引脚宏  
#define GUA_TIMER1_PWM_PORT             GPIOB  
#define GUA_TIMER1_PWM_PIN              GPIO_Pin_14  
#define GUA_TIMER1_PWM_MODE             GPIO_Mode_AF_PP 
#define GUA_TIMER1_PWM_GPIO_CLOCK				RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO 
#define GUA_TIMER1_PWM_PERIPH_CLOCK			RCC_APB2Periph_TIM1 

//计数值  
#define GUA_TIMER1_PWM_PERIOD						(72 - 1)  

/*********************内部函数声明************************/  
static void GUA_Timer1_PWM_IO_Init(void);
static void GUA_Timer1_PWM_Config_Init(GUA_U16 nGUA_Timer3_PWM_Prescaler);

//******************************************************************************              
//name:             GUA_Timer1_PWM_IO_Init             
//introduce:        定时器1的PWM的IO初始化           
//parameter:        none                   
//return:           none           
//author:           甜甜的大香瓜                   
//email:            897503845@qq.com       
//QQ group          香瓜单片机之STM8/STM32(164311667)                    
//changetime:       2017.01.14                      
//******************************************************************************  
static void GUA_Timer1_PWM_IO_Init(void)  
{      
	//IO结构体  
	GPIO_InitTypeDef GPIO_InitStructure;  

	//时钟配置 
	RCC_APB2PeriphClockCmd(GUA_TIMER1_PWM_GPIO_CLOCK, ENABLE);	

	//IO初始化
	GPIO_InitStructure.GPIO_Pin = GUA_TIMER1_PWM_PIN;
	GPIO_InitStructure.GPIO_Mode = GUA_TIMER1_PWM_MODE;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GUA_TIMER1_PWM_PORT, &GPIO_InitStructure);		
}

//******************************************************************************              
//name:             GUA_Timer1_PWM_Config_Init             
//introduce:        定时器1的PWM的配置初始化           
//parameter:        nGUA_Timer1_PWM_Prescaler:预分频数值,如100则表示1000000/100=10000Hz 
//return:           none           
//author:           甜甜的大香瓜                   
//email:            897503845@qq.com       
//QQ group          香瓜单片机之STM8/STM32(164311667)                    
//changetime:       2017.01.14                       
//******************************************************************************  
static void GUA_Timer1_PWM_Config_Init(GUA_U16 nGUA_Timer1_PWM_Prescaler)  
{      
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
	TIM_OCInitTypeDef  TIM_OCInitStructure;  
  
	//时钟配置
	RCC_APB2PeriphClockCmd(GUA_TIMER1_PWM_PERIPH_CLOCK, ENABLE);  
	
	//定时器配置
	TIM_TimeBaseStructure.TIM_Period = GUA_TIMER1_PWM_PERIOD;								//设置计数值  
	TIM_TimeBaseStructure.TIM_Prescaler = nGUA_Timer1_PWM_Prescaler - 1;		//设置预分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;														//设置时钟分频系数:不分频  
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;							//向上计数溢出模式  
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);  
	
	//PWM配置
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;												//配置为PWM模式1(小于计数值时为有效电平)    
	//TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;					//比较输出使能 
	TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;					//比较输出的互补输出使能 		
	TIM_OCInitStructure.TIM_Pulse = 0;																			//设置待装入捕获比较寄存器的脉冲值  
	//TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;							//当定时器计数值小于CCR1时为低电平  
	TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;							//当定时器计数值小于CCR1时互补输出为低电平 
	//TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;						//当MOE=0时,如果实现了OC*N,则死区后OC*=1	
	TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;						//当MOE=0时,如果实现了OC*N,则死区后OC*=1
	TIM_OC2Init(TIM1, &TIM_OCInitStructure);																//使能通道2      

	//默认关闭PWM		
	GUA_Timer1_PWM_Status(GUA_TIMER1_PWM_STATUS_OFF);	
	
	//使能	
	TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);												//CH2预装载使能  
	TIM_ARRPreloadConfig(TIM1, ENABLE);																			//使能TIM1重载寄存器ARR  	
	TIM_Cmd(TIM1, ENABLE);																									//使能定时器1  
}

//******************************************************************************          
//name:             GUA_Timer1_PWM_Status          
//introduce:        定时器1的PWM开关      
//parameter:        nGUA_Timer1_PWM_Status: GUA_TIMER1_PWM_STATUS_ON or GUA_TIMER1_PWM_STATUS_OFF        
//return:           none        
//author:           甜甜的大香瓜               
//email:            897503845@qq.com                  
//QQ group          香瓜单片机之STM8/STM32(164311667)                      
//changetime:       2017.01.14                       
//******************************************************************************    
void GUA_Timer1_PWM_Status(GUA_U8 nGUA_Timer1_PWM_Status)  
{  
  //打开PWM  
  if(nGUA_Timer1_PWM_Status == GUA_TIMER1_PWM_STATUS_ON)  
  {   
		TIM_SetCounter(TIM1, 0);		
		TIM_CtrlPWMOutputs(TIM1, ENABLE);			
  }  
  //关闭PWM 
  else  
  {  
		TIM_CtrlPWMOutputs(TIM1, DISABLE);	 	
  }  
}  
  
//******************************************************************************          
//name:             GUA_Timer1_PWM_SetDutyCycle          
//introduce:        定时器1的PWM设置占空比      
//parameter:        nGUA_Timer1_PWM_DutyCycle: 0~100为0%~100%        
//return:           none        
//author:           甜甜的大香瓜               
//email:            897503845@qq.com                  
//QQ group          香瓜单片机之STM8/STM32(164311667)                      
//changetime:       2017.01.14                         
//******************************************************************************    
void GUA_Timer1_PWM_SetDutyCycle(GUA_U8 nGUA_Timer1_PWM_DutyCycle)  
{  
  TIM_SetCompare2(TIM1, GUA_TIMER1_PWM_PERIOD*nGUA_Timer1_PWM_DutyCycle/100);   
}  
  
//******************************************************************************          
//name:             GUA_Timer1_PWM_Init          
//introduce:        定时器1的PWM初始化       
//parameter:        nGUA_Timer1_PWM_Prescaler:预分频数值,如100则表示1000000/100=10000Hz        
//return:           none        
//author:           甜甜的大香瓜               
//email:            897503845@qq.com                  
//QQ group          香瓜单片机之STM8/STM32(164311667)                      
//changetime:       2017.01.14                        
//******************************************************************************    
void GUA_Timer1_PWM_Init(GUA_U16 nGUA_Timer1_PWM_Prescaler)   
{  	
	//初始化IO  
	GUA_Timer1_PWM_IO_Init();  

	//初始化定时器配置 
	GUA_Timer1_PWM_Config_Init(nGUA_Timer1_PWM_Prescaler);
}  

2) 编写驱动头文件 GUA_Timer1_PWM.h (存放在“ …… \HARDWARE ”)

//******************************************************************************                            
//name:             GUA_Timer1_PWM.h               
//introduce:        定时器1的PWM驱动的头文件        
//author:           甜甜的大香瓜                     
//email:            897503845@qq.com         
//QQ group          香瓜单片机之STM8/STM32(164311667)                      
//changetime:       2017.01.14     
//******************************************************************************    
#ifndef _GUA_TIMER1_PWM_H_  
#define _GUA_TIMER1_PWM_H_  
   
/*********************宏定义************************/       
//类型宏
#ifndef GUA_U8        
typedef unsigned char GUA_U8;        
#endif    

#ifndef GUA_8        
typedef signed char GUA_8;        
#endif      
      
#ifndef GUA_U16        
typedef unsigned short GUA_U16;        
#endif 

#ifndef GUA_16        
typedef signed short GUA_16;        
#endif         
      
#ifndef GUA_U32        
typedef unsigned long GUA_U32;        
#endif 

#ifndef GUA_32        
typedef signed long GUA_32;       
#endif

#ifndef GUA_U64    
typedef unsigned long long GUA_U64;  
#endif

#ifndef GUA_64    
typedef signed long long GUA_64;  
#endif

//PWM的开关宏  
#define GUA_TIMER1_PWM_STATUS_ON                0       //PWM打开  
#define GUA_TIMER1_PWM_STATUS_OFF               1       //PWM关闭  

/*********************外部函数声明************************/   
void GUA_Timer1_PWM_Status(GUA_U8 nGUA_Timer1_PWM_Status);  
void GUA_Timer1_PWM_SetDutyCycle(GUA_U8 nGUA_Timer1_PWM_DutyCycle);  
void GUA_Timer1_PWM_Init(GUA_U16 nGUA_Timer1_PWM_Prescaler);  
  
#endif  

3) 工程中添加GUA_Timer1_PWM.c



4)在MDK设置中添加驱动源文件路径



2、添加库的驱动

1)添加库的驱动文件



2)添加库的驱动头文件(stm32f10x_conf.h 中)

#include "stm32f10x_tim.h" 

3、在应用层中调用

1)添加驱动头文件(main.c中)

#include "GUA_Timer1_PWM.h" 

2) 添加初始化代码(main.c的main函数中)

	GUA_Timer1_PWM_Init(26);														//设置PWM频率为1000000/26=38000Hz=38KHz  
	GUA_Timer1_PWM_SetDutyCycle(50);										//设置PWM占空比为50%  
	GUA_Timer1_PWM_Status(GUA_TIMER3_PWM_STATUS_ON);    //使能PWM   

七、注意事项
1、在初始化PWM的配置之后,需要调用使能PWM的函数才会有PWM的波形。
2、PWM会有死区。
3、如果仅使用PWM的互补通道,记得不要把另一个普通的PWM通道也初始化了。

八、实验结果

设置仿真断点在测试代码,仿真并全速运行至断点,单步执行测试代码后的PB14波形如下图:
1、使能PWM


因此,实验成功。


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

【STM32】STM32之timer1产生PWM(互补通道) 的相关文章

  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 初始化 ST-Link 设备时出错 - 无法连接到设备

    我目前正在使用 ST Link 调试器对我的 STM32F3 Discovery 板进行编程 我使用的IDE是Atollic TrueStudio 5 5 2 现在我面临一个非常奇怪的问题 那就是我不断收到消息 初始化 ST Link 设备
  • 在没有 IDE 的情况下如何使用 CMSIS?

    我正在使用 STM32F103C8T6 并想使用 CMSIS 这本质上只是寄存器定义 没有代码 让我的生活更轻松 同时仍保持在较低水平 问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用 所有文档似乎都与特定于供应商的 I
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 优化 ARM Cortex M3 代码

    我有一个 C 函数 它尝试将帧缓冲区复制到 FSMC RAM 这些函数将游戏循环的帧速率降低至 10FPS 我想知道如何分析反汇编的函数 我应该计算每个指令周期吗 我想知道CPU把时间花在哪里 在哪个部分 我确信该算法也是一个问题 因为它的
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一

随机推荐

  • 编码器输出:HTL、TTL

    HTL 即常说的推挽 就是NPN PNP的组合 所以其同时支持PNP与NPN控制电路 电路简单 好用 工作电压较宽 编码器常用5到30V均可 注 HTL输出信号电平一般等同工作电压减三极管压降 有较强的抗干扰能力 它的主要缺点是工作速度比较
  • 如何在华三H3C交换机开启http或web界面远程登录管理

    华三交换机开启web界面实验 现在很多的华三交换机和路由器默认已经自带了WEB图形界面 只需要电脑配置一个互通的ip地址连接后就能登录到web界面 操作管理起来非常方便 但有时某些是没有开启web界面的 下面就以华三模拟器交换机为例操作配置
  • < C++ >:C++ 类和对象(上)

    目录 1 面向过程和面向对象的初步认识 2 类的引入 3 类的访问限定符及封装 3 1 访问限定符 3 2 封装 4 类的声明和定义或类的定义 可以理解成声明和定义 5 类的作用域 6 类的实例化 7 类对象模型 7 1 如何计算类对象的大
  • 释放技术的想象-解码腾讯云软件架构与应用

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 关于腾讯 你可能玩过 王者荣耀 你可能用过 微信 和它的 小程序 你可能看过 腾讯视频 并且曾为之付费 你可能已经是多年的 QQ 老手但还不知道什么是 MQ 作为成立多年的老牌互联网公
  • 为何零信任架构身份管理平台更可靠?

    随着信息技术的不断进步 云计算 物联网以及移动设备的普及 信息泄露等安全问题愈发频繁 近期 一起某高校学生的信息泄露事件引发了大家的广泛讨论 该校学生利用其身份便利 非法获取了大量学生的姓名 学号 照片等隐私信息 这次热门话题的讨论后 人们
  • python实现排列组合代码

    def combination n c com 1 limit 0 per for pos in range limit n t per pos if len set t len t if len t c yield pos else fo
  • 22道常见RocketMQ面试题以及答案

    面试宝典到手 搞定面试 不再是难题 系列文章传送地址 请点击本链接 1 RocketMQ是什么 2 RocketMQ有什么作用 3 RoctetMQ的架构 4 RoctetMQ的优缺点 8 消息过滤 如何实现 9 消息去重 如果由于网络等原
  • 基于WSL2+NVIDIA Docker的开发环境最佳实践

    1 Windows 11 安装WSL2 Ubuntu 22 04 LTS 1 1 安装windows附加功能 点击 设置 gt 应用 gt 可选功能 gt 更多windows功能 弹出的窗口 勾选 适用于Linux的Windows子系统 和
  • 学习dubbo遇到的报错:UnsatisfiedDependencyException: Error creating bean with name ‘us

    学习dubbo直连方式遇到的报错 记录一下 org springframework beans factory UnsatisfiedDependencyException Error creating bean with name use
  • win10企业版更新和安全中没有 “恢复”这个选项_永别了您内,整疯我的Win10自动更新...

    朋友终于买了台微星GP75 用来驾驭重制版剑三的网游史最大客户端 号称几乎无短板 处处贵到痛点的香香75的确值得 游戏流畅丝滑 开强冷模式手托半点不热 不过就在昨天 朋友突然问我 微星笔记本自带的win10系统可以退回win7吗 害 这哥果
  • centos 安装k8s

    第一步 每台机子都做 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 第二步 每台机子都做 永久关闭selinux sed i s enforcing disabled
  • 30-10-010-编译-kylin-on-druid-2.6.0-CDH57编译

    1 视界 1 下载kylin git clone https github com apache kylin kylin 2 安装maven nodejs 1 maven的安装参照百度 这里不再赘述 2 nodejs的安装参考
  • ssh连接慢解决办法

    ssh连接慢解决办法 成功 用真机连接虚拟机卡的话 1 进入虚拟机vim etc ssh sshd config 2 将 UseDNS yes改为UseDNS no即可如下 使用 UseDNS找到地方然后添加 UseDNS yes UseD
  • VS2019+QT5.15.2+QGIS二次开发环境搭建

    VS2019 QT5 15 2 QGIS二次开发环境搭建 1 开发环境 VS2019 QT5 15 2 QGIS 注意 QT 平台的版本与qgis下载的版本有关 以前采用OSGeo4w64来下载qgis时会区分32和64位 但现在官网已经不
  • QT中QWeight与QMainWindow的区别

    在Qt中 QWidget 和 QMainWindow 是两个常用的类 用于创建用户界面 它们之间有一些区别 1 QWidget 是Qt中所有用户界面类的基类 而 QMainWindow 是一个特殊的窗口类 通常用于创建应用程序的主窗口 QM
  • elasticsearch(磁盘删除data后kibana自动进入只读模式)

    Elasticsearch 基于磁盘的碎片分配 向index插入 删除数据时发生报错 index kibana 1 blocked by FORBIDDEN 12 index read only allow delete api clust
  • FreeRTOS笔记(一)简介

    这个笔记主要依据韦东山freertos快速入门系列记录 感谢韦东山老师的总结 什么是实时操作系统 操作系统是一个控制程序 负责协调分配计算资源和内存资源给不同的应用程序使用 并防止系统出现故障 操作系统通过一个调度算法和内存管理算法尽可能把
  • DEDE自动调用轮播图/幻灯片

    备注 以下示例是以自动调取轮播图为例 具体使用时 步骤不变 内容据实调整即可 一 创建 1 新建模型 2 在新模型下依次添加字段 本例字段 datu xiaotu 分别给PC端和手机端用 据实调整即可
  • 雅思词汇表8000词版_考“鸭”干货丨雅思词汇备考技巧!

    点击蓝字 关注我们 考 鸭 干货第3期 雅思词汇备考技巧 语言学家TERREL认为 只要掌握了足够的词汇 即使没有多少语法知识 外语学习者也能较好理解外语和用外语进行表达 语言学家WILKINS有一句经典名言 没有语法只能传达很少的信息 没
  • 【STM32】STM32之timer1产生PWM(互补通道)

    本篇博文最后修改时间 2017年01月14日 23 50 一 简介 本文介绍STM32系列如何使用timer1的第TIM1 CH2N通道 PB14 产生PWM 二 实验平台 库版本 STM32F10x StdPeriph Lib V3 5