Stm32f103c8t6(proteus仿真)学习

您所在的位置:网站首页 oppoa8怎么设置呼吸灯 Stm32f103c8t6(proteus仿真)学习

Stm32f103c8t6(proteus仿真)学习

2024-07-12 19:05| 来源: 网络整理| 查看: 265

目录 **一、proteus原理图绘制****二、代码的编写****1. PWM引脚的选择****2. PWM.c文件****3. PWM.h头文件****4. main.c文件****5. 效果展示** **三、项目(代码+仿真)分享链接**

一、proteus原理图绘制

在这里插入图片描述 示波器的位置 在这里插入图片描述

二、代码的编写 1. PWM引脚的选择

查看下图引脚定义,选择定时器和定时器通道输出PWM 在这里插入图片描述以定时器3(TIM3)的通道1为例 在上图找到TIM3_CH1,TIM3表示定时器3,CH1表示通道1 由图可知对应引脚为:PA6

2. PWM.c文件

头文件

#include "PWM.h"

PWM初始化函数

void PWM_Init(void) //PWM初始化 { //GPIO的结构体定义,定义一个GPIO类型的结构体,名字为GPIO_InitStructure GPIO_InitTypeDef GPIO_InitStructure; //TIM_TimeBase的结构体定义,定义一个TIM_TimeBase类型的结构体,名字为TIM_TimeBaseInitStructure TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //TIM_OC的结构体定义,定义一个TIM_OC类型的结构体,名字为TIM_OCInitStructure TIM_OCInitTypeDef TIM_OCInitStructure; //开启定时器3的时钟,注意是APB1(GPIO的是APB2) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //开启GPIO的时钟,注意是APB2 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //GPIO引脚的重映射,TIM3_CH1重映射引脚到PB4 //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM3, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //GPIO_Pin_4;TIM3_CH1重映射引脚到PB4 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO_Init(GPIOB, &GPIO_InitStructure); //PB4 //选择定时器的内部时钟源 TIM3 TIM_InternalClockConfig(TIM3); //配置定时器时基单元:TIM_TimeBase //选择时钟分频,可以选择1分频、2分频和4分频 TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //TIM_CKD_DIV1:1分频 //选择定时器计数方式,可选择向上计数、向下计数、中心对齐计数 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM_CounterMode_Up:向上计数 //设置ARR,即定时器周期:TIM_Period,取值0-65535 TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR //设置PSC,即定时器预分频器的值:TIM_Prescaler,取值0-65535 TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //PSC //高级定时器才用的到,重复计算器,先用不上赋值为0 TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //TIM_TimeBase初始化 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); //初始化配置定时器输出比较单元:TIM_OC //设置输出比较的模式:TIM_OCMode_PWM1,PWM1模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //设置输出比较的极性:TIM_OCPolarity_High;高极性:有效电平为高电平 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //设置输出使能 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设置捕获比较寄存器 CCR 的值 TIM_OCInitStructure.TIM_Pulse = 0; //CCR //初始化定时器3通道1 TIM_OC1Init(TIM3, &TIM_OCInitStructure); //使能定时器3 TIM_Cmd(TIM3, ENABLE); }

设置捕获比较寄存器 CCR 的值

void PWM_SetCompare1(uint16_t Compare) { TIM_SetCompare1(TIM3, Compare); //设置捕获比较寄存器 CCR 的值 } 3. PWM.h头文件 #ifndef __PWM_H #define __PWM_H #include "stm32f10x.h" // Device header void PWM_Init(void); void PWM_SetCompare1(uint16_t Compare); #endif 4. main.c文件 #include "stm32f10x.h" #include "OLED.h" //OLED显示屏 #include "PWM.h" //PWM输出 #include "delay.h" uint16_t i =0 ; int main(void) { delay_init(); OLED_Init(); PWM_Init(); OLED_ShowString(1,1,"PWM: "); while(1){ for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3