久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1378|回復: 1
打印 上一主題 下一主題
收起左側

stm32f103c8t6如何使用pwm調節四檔燈光亮度

[復制鏈接]
跳轉到指定樓層
樓主
ID:1110508 發表于 2024-2-1 15:10 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
求助!編寫的程序不知道哪里出了錯!調節不了亮度#include "stm32f10x.h"                   //包含stm32f10x.h的頭文件
void delay_nms(uint16_t ms) //定義毫秒延時子函數
{
                uint16_t i;//定義無符號字符型
                for(;ms>0;ms--)        //毫秒級
                for(i=10000;i>0;i--);       
}

//LED的初始化配置函數
void LED_config(void)                                                                                                       
{
        GPIO_InitTypeDef gpio;         //定義InitTypeDef類型的結構體指針 gpio
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA的外設時鐘
        gpio.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
        gpio.GPIO_Pin=GPIO_Pin_7;
        gpio.GPIO_Speed=GPIO_Speed_2MHz;                                //速度50MHZ
        GPIO_Init(GPIOA,&gpio);                                                                  //調用GPIO_Init函數 對GPIOA口初始化
}

void KEY_config(void) //KEY_按鍵的初始化配置函數
{
                GPIO_InitTypeDef gpio;                 //定義結構體
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);        //使能GPIOA的時鐘
                gpio.GPIO_Mode=GPIO_Mode_IPU;        //輸入上拉模式
                gpio.GPIO_Pin=GPIO_Pin_15;
          GPIO_Init(GPIOA,&gpio);                          //GPIOA口初始化
}

uint8_t KEY_scan(void) //判別哪個按鍵按下程序 按鍵掃描
{
                uint8_t rtl;        //定義一個rtl,用來接收按鍵返回的值
                if((GPIO_ReadInputData(GPIOA)&0xF)==0XF)// 判別是否有 鍵按下
                return 0xff;                //如果沒有按鍵按下,返回FF
                delay_nms(10);        //延時消抖
                if((GPIO_ReadInputData(GPIOA)&0XF)==0XF) //再次判別是否有鍵按下_
                return 0xff;                //如果沒有按鍵按下,返回FF
                rtl=GPIO_ReadInputData(GPIOA)&0xF;                //返回鍵值               
                while((GPIO_ReadInputData(GPIOA)&0XF)!=0XF); //等待按鍵釋放
                return rtl;                        //返回鍵值                                                                                                               
}

void TIM3_CH2_PWM_Init(u16 per,u16 psc)//TIM2定時器中斷PWM波的初始化配置
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        TIM_OCInitTypeDef TIM_OCInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /* 開啟時鐘 */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
       
        /*  配置GPIO的模式和IO口 */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        TIM_TimeBaseInitStructure.TIM_Period=per;   //自動裝載值
        TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分頻系數
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //設置向上計數模式
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);       
       
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OC2Init(TIM3,&TIM_OCInitStructure); //輸出比較通道2初始化
       
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR2 上的預裝載寄存器
        TIM_ARRPreloadConfig(TIM3,ENABLE);//使能預裝載寄存器
       
        TIM_Cmd(TIM3,ENABLE); //使能定時器               
}
int main(void)
{
        uint16_t PWM=1000; //定義PWM波初始值為1000   即CRR的值
        LED_config();//初始化燈
        KEY_config();//初始化按鍵
        TIM3_CH2_PWM_Init(500,72-1);        //初始化PWM函數
        while(1)
        {
                if(KEY_scan()==0xe)//按鍵按下
                {
                        PWM-=200;   //CCR的值右移一位,即除以2     原始PWM值:100%  按鍵按一次除一次為: 50%,25%,12.5%
                        if(PWM==0)//若CCR和seg的值小于125,則再賦值=為1000。
                        {
                                PWM=1000;
                        }
                }
                        TIM_SetCompare2(TIM3,PWM);//函數,把PWM變量的值寫入TIM2的輸出通道3的CCR寄存器中,修改PWM占空比。
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1110508 發表于 2024-2-1 15:20 | 只看該作者
LED燈光接到的PA7口,PA7是定時器3的二通道
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 正在播放国产精品 | 日韩精品视频一区二区三区 | 久久久久国产一区二区三区四区 | 亚洲字幕在线观看 | 久久久久久91 | 四虎免费视频 | 国产一区日韩在线 | 毛片av免费看 | 亚洲女人天堂成人av在线 | 伊人狠狠干 | 丁香综合| 亚洲欧美综合精品另类天天更新 | 国产精品亚洲一区 | 一级毛片在线视频 | 国产精品视频在线观看 | 蜜桃av鲁一鲁一鲁一鲁 | 91精品国产色综合久久不卡蜜臀 | 涩涩视频大全 | 中文字幕一区在线观看视频 | 黑人久久久 | 精品美女久久久久久免费 | 国产免费观看一级国产 | 欧美a视频 | 中文成人在线 | 国产成人一区二区 | 国产精品av久久久久久久久久 | 国产精彩视频 | 韩日一区二区三区 | 亚洲视频在线免费 | 色男人的天堂 | 国产性网 | 国产成人亚洲精品自产在线 | 精品视频在线观看 | 久久国产精品色av免费观看 | 欧美一级淫片免费视频黄 | 国产精品久久久久久中文字 | 91国内在线观看 | 亚洲网一区 | 色综合99 | 国产精品爱久久久久久久 | 欧美日韩不卡合集视频 |