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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

Proteus仿真stm32單片機但是示波器測不出pwm信號

[復制鏈接]
跳轉到指定樓層
樓主
做的基于stm32控制的直流開關電源不知道是仿真電路有問題還是程序有問題



單片機源程序如下:
#include "stm32f10x.h"


#define VOLTAGE _PA_2   // 電壓檢測口


#define PWM1 _PA_7      // PWM輸出口1
#define PWM2 _PC_6      // PWM輸出口2


#define F_CPU 72000000L // CPU頻率
#define BAUD 9600       // 波特率


void init_gpio();       // 初始化GPIO口
void init_timer();      // 初始化定時器
void init_adc();        // 初始化ADC
void init_usart();      // 初始化USART


void set_duty(uint8_t); // 設置PWM占空比


int main(void)
{
    init_gpio();
    init_adc();
    init_timer();
    init_usart();


    uint16_t voltage; // 電壓值
    uint8_t duty = 50; // PWM占空比初始化為50%


    while(1)
    {
        voltage = (ADC1->DR * 33) / 4096;  // 電壓檢測,轉換為實際電壓
        if(voltage < 10) duty = 0;         // 電壓低于10V,PWM占空比為0
        else if(voltage > 10 && voltage < 15) duty = 25; // 10V < 電壓 < 15V,PWM占空比為25%
        else if(voltage > 15 && voltage < 20) duty = 50; // 15V < 電壓 < 20V,PWM占空比為50%
        else duty = 75;                    // 電壓大于20V,PWM占空比為75%


        set_duty(duty); // 設置PWM占空比
    }
}


void init_gpio()
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN; // 使能GPIOA和GPIOC時鐘


    GPIOA->CRL &= ~GPIO_CRL_MODE2;      // 電壓檢測口輸入模式
    GPIOA->CRL &= ~GPIO_CRL_CNF2;       // 浮空輸入模式
    GPIOA->CRL |= GPIO_CRL_CNF2_1;      


    GPIOA->CRL |= GPIO_CRL_MODE7_1; // PWM輸出口1為復用推挽輸出
    GPIOA->CRL |= GPIO_CRL_CNF7_1;      


    GPIOC->CRL |= GPIO_CRL_MODE6_1; // PWM輸出口2為復用推挽輸出
    GPIOC->CRL |= GPIO_CRL_CNF6_1;
}


void init_adc()
{
    RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;    // 使能ADC時鐘
    RCC->CFGR |= RCC_CFGR_ADCPRE_DIV8;     // 設置ADC時鐘分頻系數為8


    ADC1->CR2 |= ADC_CR2_CAL;              // ADC自校準
    while(ADC1->CR2 & ADC_CR2_CAL);


    ADC1->CR2 |= ADC_CR2_JEXTSEL;          // 外部觸發
    ADC1->CR2 |= ADC_CR2_JEXTTRIG;         // 啟動


    ADC1->CR2 |= ADC_CR2_ADON;             // 啟動ADC
    while(!(ADC1->SR & 0x00000040));
}


void init_timer()
{
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;    // 使能TIM3時鐘
    TIM3->PSC = (F_CPU/1000000) - 1;      // 設置預分頻數為72-1,得到1MHz時鐘
    TIM3->ARR = 99;                       // 設置計數器自動重載值為99,得到10kHz的PWM頻率


    TIM3->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // PWM模式1
    TIM3->CCMR2 |= 0x00007800; // PWM模式1


    TIM3->CCR1 = 50;                      // PWM占空比初始化為50%
    TIM3->CCR2 = 50;


    TIM3->CCER |= TIM_CCER_CC1E;           // 使能CC1通道輸出
    TIM3->CCER |= TIM_CCER_CC2E;           // 使能CC2通道輸出


    TIM3->CR1 |= TIM_CR1_CEN;              // 啟動TIM3
}


void init_usart()
{
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;  // 使能USART1時鐘
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;    // 使能GPIOA時鐘


    GPIOA->CRH |= GPIO_CRH_CNF9_1;        // USART1_TX為復用推挽輸出
    GPIOA->CRH |= GPIO_CRH_MODE9_0;       // 最大輸出速度為10MHz


    GPIOA->CRH |= GPIO_CRH_CNF10_0;       // USART1_RX為輸入模式


    USART1->BRR = F_CPU/BAUD;             // 設置波特率為9600


    USART1->CR1 |= USART_CR1_TE;          // 使能USART1發送
    USART1->CR1 |= USART_CR1_RE;          // 使能USART1接收


    USART1->CR1 |= USART_CR1_UE;          // 啟動USART1
}


void set_duty(uint8_t duty)
{
    TIM3->CCR1 = duty; // 設置PWM占空比
    TIM3->CCR2 = duty;
}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美性生活免费 | 97av视频| 国产精品一区二区欧美黑人喷潮水 | www.狠狠干 | 欧美在线观看一区二区 | 免费在线播放黄色 | 久久综合国产精品 | 欧美久久久久久久久 | 亚洲一区 中文字幕 | 粉嫩在线 | 在线观看特色大片免费网站 | 国产精品中文字幕在线播放 | 亚洲视频 欧美视频 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 国产欧美精品一区二区三区 | 在线视频亚洲 | 欧美成人性生活 | 欧美一级免费看 | 日韩av手机在线观看 | 在线看片国产 | 999精品视频 | 精品久久香蕉国产线看观看亚洲 | 日韩日韩日韩日韩日韩日韩日韩 | 欧美精品一区二区三区四区五区 | 视频1区2区 | 久久最新网址 | 日本激情视频中文字幕 | 欧美日韩高清在线观看 | 精品亚洲一区二区 | 国产一区 在线视频 | 中文字幕亚洲一区二区三区 | 国产高清精品在线 | 欧美高清视频 | 欧美一级黄视频 | 无码国模国产在线观看 | 久久国产成人午夜av影院武则天 | 中文字幕在线观看日韩 | 精品在线一区 | 91精品国产高清一区二区三区 | 国产日韩视频在线 | 亚洲精品欧美精品 |