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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2870|回復: 1
收起左側

stm32DMA中斷采集多路ADC數據+OLED12864漢字顯示

[復制鏈接]
ID:521503 發表于 2019-12-15 15:12 | 顯示全部樓層 |閱讀模式
#include "stm32f10x.h"
#include "OLED12864.h"
#include "comm.h"
#include "keyled.h"

Systemtypedef                System;
ADCtypedef                        ADResult[2];
extern u32  ADC_BUF[2];
u32 temp=0; //電壓數據
//unsigned short ADResult;

/**
  * @brief  STM32時鐘系統初始化
        *                                        SYSClk= 72MHz
        *                                        APB1         = 36MHz
        *                                        APB2         = 72MHz
        *                                        AHB         = 72MHz
        *                                        ADC_Clk = 18MHz
        * @參數   None
  * @返回值 None
  */
void Stm32_Clock_Init(void)
{
        RCC->CR|=0x00010000;          //外部高速時鐘使能HSEON
        while(!(RCC->CR>>17));        //等待外部時鐘就緒

        /* PLL=9*HSE OSC,        APB1=AHB/DIV2, APB2=AHB/DIV1,        ADC_Clk = APB2/4 */
        RCC->CFGR=0X1C4400;
        RCC->CFGR|=1<<16;                          //HSE as PLLSRC

        FLASH->ACR|=0x32;                          //FLASH 2個延時周期

        RCC->CR|=0x01000000;          //PLLON
        while(!(RCC->CR>>25));        //等待PLL鎖定

        RCC->CFGR|=0x00000002;        //PLL作為系統時鐘
        while((RCC->CFGR & 0x0c) != 0x08);        //wait,PLL used as system clock
}

void SystemVar_Init(void)
{
        System.HPriTime = 0;
        System.LPriTime = 0;

}

/**
  * @brief  用戶任務調度定時器初始化.
  *                                        周期1ms.
  *                                        使能更新中斷.
        * @參數   None
  * @返回值 None
  */
void UserTaskTimer_Init(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                //???

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

        TIM_TimeBaseStructure.TIM_Prescaler                 = 71;
        TIM_TimeBaseStructure.TIM_Period                                 = 1000;//1ms時間設定

        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode         = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

        TIM_ClearITPendingBit(TIM3,        TIM_IT_Update);
        TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

        {
                NVIC_InitTypeDef    NVIC_InitStructure;

                NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelCmd        =        ENABLE;
                NVIC_Init(&NVIC_InitStructure);
        }

        TIM_Cmd(TIM3, ENABLE);
}

/**
  * @brief  用戶任務調度定時器更新中斷.
  *                                        啟動ADC轉換.
  *                                        軟定時器更新.
        * @參數   None
  * @返回值 None
  */
void TIM3_IRQHandler(void)
{
        static u32 TimeCount = 0;                                                //???
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
        {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
                TimeCount++;
               
                if(TimeCount % HPRITASK_TIME_MS == 0)                System.HPriTime = 1;               
                if(TimeCount % LPRITASK_TIME_MS == 0)                System.LPriTime = 1;

        }
}

int main(void)
{
        u32 wd;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        Stm32_Clock_Init();

        SystemVar_Init();
        
        LED_Init();
        
        AD_init();
        ADvar_init();
        
        UserTaskTimer_Init();

         OLED_Init();
        OLED_Fill(0);
//        OLED_P8x16Str(0,0,"BLDC CLOSED LOOP");
//        OLED_P8x16Str(5,2,"Targe:      rpm");
////        OLED_P8x16Str(5,4,"Real :      rpm");
////        OLED_P8x16Str(5,6,"VBUS :      mV");
//        OLED_P8x16Str(5,6,"D_Y :      mV");
//        OLED_P8x16Str(5,4,"W_D :      mV");
        OLED_ShowCHinese(0,4,19);//運
        OLED_ShowCHinese(18,4,20);//行
        OLED_ShowCHinese(36,4,21);//時
        OLED_ShowCHinese(54,4,22);//間
        OLED_ShowCHinese(72,4,13);//
        LED1 = LED2 = LED3 = 0;
        LED4 = LED5 = 1;
        while(1)
        {
                if(System.HPriTime)
                {
                        System.HPriTime = 0;
                        // do something
                        LED2 = !LED2;
                }
                else if(System.LPriTime)
                {        
                        //刷新HMI信息
                        System.LPriTime = 0;
                        temp = ((ADResult[0].avg*3300)/4096); //電壓數據轉換
                        wd = ((ADResult[1].avg*3300)/4096);
                        Display_data(50,6,temp,0); //OLED打印電壓數據
                        Display_data(50,4,wd,0); //OLED打印電壓數據
                }
        }
}


DMA_ADC.7z

180.82 KB, 下載次數: 55, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:469589 發表于 2022-11-6 09:32 | 顯示全部樓層
漢字顯示有做查表的沒?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区久久久蜜月 | 网站av| 久久机热| 五月开心婷婷 | 国产日韩亚洲 | 中文字幕精品视频 | 国产成人91| 精品一区久久 | 免费激情网站 | 黄色毛毛片 | 黄色录像一级片 | 午夜久久精品 | a一级黄色片 | 精品久久久久久 | 四虎影院在线免费观看 | 欧美国产日韩在线 | 免费亚洲视频 | 日韩av网站在线观看 | 日韩视频一区 | 天天综合影院 | 成人免费网站 | 青草福利视频 | 午夜爱 | 怡红院久久 | 日韩不卡一区 | 午夜精品在线观看 | 国产精品二区一区二区aⅴ污介绍 | 国产精品一区在线观看 | 国产一区精品在线观看 | 中文字幕不卡 | 日韩激情久久 | 欧美一区二区免费 | 人与拘一级a毛片 | 日皮视频在线观看 | 亚洲国产免费 | 欧美日韩性| 午夜视频福利 | 黄视频免费观看 | 午夜xxx| 韩日在线视频 | 日韩一区二区不卡 |