娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

GD32F303固件庫開發(fā)(14)----IIC之配置OLED

發(fā)布者:DreamySunset最新更新時間:2024-11-14 來源: elecfans關鍵字:GD32F303  固件庫開發(fā)  IIC 手機看文章 掃描二維碼
隨時隨地手機看文章

概述

本章配置GD32F303使用IIC進行驅動SSD1306的12864OLED。 查閱手冊可以得知,PB10、PB11為I2C的接口。 需要GD樣片的可以加群申請:615061293 。

視頻教學

https://www.bilibili.com/video/BV1od4y1u7t7/


csdn課程

課程更加詳細。 https://download.csdn.net/course/detail/37144


樣品申請

https://www.wjx.top/vm/wFGhGPF.aspx#


參考文檔

GD官方文檔GD32F30x_Firmware_Library_V2.1.4下面IIC的Master_transmitter&slave_receiver


時鐘使能

/*!

    brief      enable the peripheral clock

    param[in]  none

    param[out] none

    retval     none

*/void rcu_config(void){    /* enable GPIOB clock */

    rcu_periph_clock_enable(RCU_GPIOB);    /* enable I2C1 clock */

    rcu_periph_clock_enable(RCU_I2C1);

}

初始化IO

/*!

    brief      cofigure the GPIO ports

    param[in]  none

    param[out] none

    retval     none

*/void gpio_config(void){    /* connect PB10 to I2C1_SCL */

    /* connect PB11 to I2C1_SDA */

    gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ,  GPIO_PIN_10 | GPIO_PIN_11);

}

IIC初始化

/*!

    brief      cofigure the I2C0 and I2C1 interfaces

    param[in]  none

    param[out] none

    retval     none

*/void i2c_config(void)

{    i2c_clock_config(I2C1, 100000, I2C_DTCY_2);    /* I2C address configure */

    i2c_mode_addr_config(I2C1, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x78);    /* enable I2C1 */

    i2c_enable(I2C1);    /* enable acknowledge */

    i2c_ack_config(I2C1, I2C_ACK_ENABLE);

}

配置IIC接口

/*!

    brief      cofigure the  I2C1 interfaces

    param[in]  none

    param[out] none

    retval     none

*/void i2c_config(void)

{    /* configure I2C1 clock */

    i2c_clock_config(I2C1, 100000, I2C_DTCY_2);    /* configure I2C1 address */

    i2c_mode_addr_config(I2C1, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x78);    /* enable I2C1 */

    i2c_enable(I2C1);    /* enable acknowledge */

    i2c_ack_config(I2C1, I2C_ACK_ENABLE);

}


修改IIC發(fā)送代碼

將Master_transmitter&slave_receiver的IIC發(fā)送代碼進行修改

/**

  * @brief I2C1寫函數(shù)

  * @param addr設備地址

  * @param pdata 數(shù)據(jù)指針

  * @param data_length 數(shù)據(jù)長度

  */

void i2c_write(uint8_t addr, uint8_t *pdata, uint32_t data_length)

{

    uint32_t i;


    /* wait until I2C bus is idle */

    while(i2c_flag_get(I2C1, I2C_FLAG_I2CBSY));//等待總線空閑

    /* send a start condition to I2C bus */

    i2c_start_on_bus(I2C1);//發(fā)送start信號

    /* wait until SBSEND bit is set */

    while(!i2c_flag_get(I2C1, I2C_FLAG_SBSEND));    //起始位是否發(fā)送

    /* send slave address to I2C bus */

    i2c_master_addressing(I2C1, addr, I2C_TRANSMITTER);//設置從機地址和執(zhí)行發(fā)送操作

    /* wait until ADDSEND bit is set */

    while(!i2c_flag_get(I2C1, I2C_FLAG_ADDSEND));//主機模式下地址是否發(fā)送

    /* clear ADDSEND bit */

    i2c_flag_clear(I2C1, I2C_FLAG_ADDSEND);//清除標志位主機模式下地址是否發(fā)送

    /* wait until the transmit data buffer is empty */

    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));//發(fā)送期間I2C_DATA為空

    for(i = 0; i < data_length; i++){

        /* data transmission */

        i2c_data_transmit(I2C1, pdata[i]);//發(fā)送數(shù)據(jù)

        /* wait until the TBE bit is set */

        while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));//發(fā)送期間I2C_DATA為空

    }

    /* send a stop condition to I2C bus */

    i2c_stop_on_bus(I2C1);//在I2C總線上生成停止位

    /* wait until stop condition generate */ 

    while(I2C_CTL0(I2C1)&0x0200);  //等待直到停止條件生成  

}


OLED

查看文檔可以知道地址為b0111100或者b0111101,當R/W位置寫0的時候,才能進行寫的操作,那么地址默認為0x78(b01111000)或者0x7A(b01111010)

參考程序

這里使用0.96OLED顯示屏_STM32F103C8_IIC_V1.0來進行移植查看工程可以知道主要是有3個文件來進行OLED的驅動,移入OLE.h .c 、oledfont.h 、 bmp.h 移入文件之后要注意導入C文件。

記得添加路徑。刪除沒有用的頭文件 刪除sys.h文件

刪除delay.h文件

可以查看stdint.h

在oled.h中添加u8 u32定義 也可以直接修改

typedef unsigned          char u8;typedef unsigned           int u32;


先把oled.h添加主程序中。

查看oled.h,可以看到IIC定義,同時也是模擬IIC,可以注釋掉

查看oled.c,可以看到是模擬iic,這些都可以注釋不要,我們使用的是iIC,不是模擬。

將IIC寫放入oled.c中。 記得導入#include 'gd32f30x_i2c.h'頭文件

記得在oled.h中申明 要使用uint8和uint32,導入頭文件#include 'stdint.h'

IIC寫一個字節(jié)可以修改為如下所示。

/**********************************************

// IIC Write byte

**********************************************/


void Write_IIC_Byte(unsigned char IIC_Byte)

{

//    unsigned char i;

//    unsigned char m,da;

//    da=IIC_Byte;

//    OLED_SCLK_Clr();

//    for(i=0;i< 8;i++)        

//    {

//            m=da;

//        //    OLED_SCLK_Clr();

//        m=m&0x80;

//        if(m==0x80)

//        {OLED_SDIN_Set();}

//        else OLED_SDIN_Clr();

//            da=da< < 1;

//        OLED_SCLK_Set();

//        OLED_SCLK_Clr();

//        }


uint8_t byte[1] = {};    

byte[0]=IIC_Byte;

i2c_write(0x78,byte, 1);            

}

IIC寫指令 向0x78設備寫命令0x00的IIC_Command指令。

481f23e4605c8ac8ec99809202cec1cd_wKgaomS_6W6AWVMHAAA6Uqdkgs4922.png

/**********************************************

// IIC Write Command

**********************************************/

void Write_IIC_Command(unsigned char IIC_Command)

{

//   IIC_Start();

//   Write_IIC_Byte(0x78);            //Slave address,SA0=0

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(0x00);            //write command

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(IIC_Command); 

//    IIC_Wait_Ack();    

//   IIC_Stop();



    uint8_t byte[2] = {};    

    byte[0]    =0x00;

    byte[1]    =IIC_Command;    

    i2c_write(0x78,byte, 2);                

}

IIC寫數(shù)據(jù) 向0x78設備寫數(shù)據(jù)0x40的IIC_Data指令。

5719a55712fbaffae90aa8fa856aebf8_wKgZomS_6W6AQLluAAA3aAd8GSw941.png

/**********************************************

// IIC Write Data

**********************************************/

void Write_IIC_Data(unsigned char IIC_Data)

{

//   IIC_Start();

//   Write_IIC_Byte(0x78);            //D/C#=0; R/W#=0

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(0x40);            //write data

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(IIC_Data);

//    IIC_Wait_Ack();    

//   IIC_Stop();



    uint8_t byte[2] = {};    

    byte[0]    =0x40;

    byte[1]    =IIC_Data;    

    i2c_write(0x78,byte, 2);        


}

在oled.c中,OLED_Init初始化可以注釋掉gpio初始化

47392872a958c96d50d30859a1a2bbee_wKgaomS_6W6AULAzAAB0-jmUk4c557.png

在oled.c中,OLED_Init初始化中有個延時800ms。 導入 #include 'systick.h' 可以使用delay_1ms(800);

8141f292e122367e5dada77a447e1291_wKgZomS_6W6ATzjPAABsNvEBBqQ660.png

取模

7bbe55e31b769475dab751f1cf6d9595_wKgaomS_6W6ABpzfAABf-pV_Bdo768.png

389fe1ea43cbb5e2138100cf68439658_wKgZomS_6W-AF6u7AAPFfjoMF-w333.png

在oledfont.h中放入字庫

95cdd4689a0fda19b73df0235ca1d8e9_wKgZomS_6W-ALQ2WAANWQaimEfw565.png

char Hzk[][32]={


// 記(0) 帖(1) 年(2) 月(3) 日(4)


{0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00},

{0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00},/*'記',0*/

/* (16 X 16 , 宋體 )*/


{0x00,0xF8,0x08,0xFF,0x08,0xF8,0x00,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00},

{0x00,0x0F,0x00,0xFF,0x08,0x0F,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00},/*'帖',1*/

/* (16 X 16 , 宋體 )*/


{0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00},

{0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*'年',2*/

/* (16 X 16 , 宋體 )*/


{0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00},

{0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*'月',3*/

/* (16 X 16 , 宋體 )*/


{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00},

{0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*'日',4*/

/* (16 X 16 , 宋體 )*/





};

在main.c中添加顯示


OLED_Init();            //初始化OLED  

        OLED_Clear()      ; 

        OLED_ShowCHinese(0,0,0);//記

        OLED_ShowCHinese(16,0,1);//帖



        OLED_ShowNum(0,2,2022,4,16);//顯示ASCII字符的碼值             

        OLED_ShowCHinese(32,2,2);//年    

        OLED_ShowNum(48,2,9,1,16);//顯示ASCII字符的碼值         

        OLED_ShowCHinese(64,2,3);//月

        OLED_ShowNum(80,2,10,2,16);//顯示ASCII字符的碼值                 

        OLED_ShowCHinese(96,2,4);//日

字體大小只有2個

3c8888bd7b47dea2932db579447865bd_wKgaomS_6W-AL69eAACLL9lAXjI835.png

顯示字符


OLED_ShowString(40,2,'ZXY',8);

d5199433203cf78cbd647c3621991659_wKgZomS_6W-AXq8cAAiF00JwGLk058.png

圖片

f7578f247ca30fd30d887c4b44ee1384_wKgaomS_6W-AdptRAABlp1egRog740.png

圖片放在bmp.h中。


#ifndef __BMP_H

#define __BMP_H        


unsigned char BMP1[]={

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x7F,0xFF,0xFF,

0xFF,0xFF,0xFF,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x0F,0x0F,

0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,

0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xC4,0x04,0x04,0x04,0x07,0xFF,

[1] [2] [3] [4] [5]
關鍵字:GD32F303  固件庫開發(fā)  IIC 引用地址:GD32F303固件庫開發(fā)(14)----IIC之配置OLED

上一篇:GD32F303固件庫開發(fā)(15)----外部中斷EXTI
下一篇:RT-Thread開發(fā)GD32F450添加spiflash外設的步驟

推薦閱讀最新更新時間:2025-05-17 17:05

STM32紅牛開發(fā)板非固件庫控制LED
摘要 STM32紅牛開發(fā)板上的5個LED,接在GPIOF6~10腳,輸出低電平時,LED亮。這樣我們設置GPIOF的相關寄存器,讓其輸出低電平就可以讓LED亮。因為沒有用到ST提供的固件庫,所以是直接對寄存器的內(nèi)存地址讀寫,即對一個指向該地址的指針變量進行讀寫。并且該變量必須為易變型的,即用volatile定義,這樣是為了告訴編譯器不要去優(yōu)化這個變量,導致其它一些寄存器的數(shù)據(jù)變化。GPIOx是掛載在APB2高速外設總線上的,最大頻率是72MHZ,所以我們除了了打開HSE(外部高速時鐘)并關閉內(nèi)部高速時鐘(開機默認選擇了HSI)外,還要打開APB2總線的時鐘。 一、寄存器地址映射 外設的基址PERI
[單片機]
愛芯元智榮獲IIC“年度新銳初創(chuàng)IC設計公司”獎,并入選TOP10 AI芯片公司
愛芯元智榮獲IIC“年度新銳初創(chuàng)IC設計公司”獎,并入選TOP10 AI芯片公司 中國 上海 2021年8月18日——昨日, 2022中國IC領袖峰會暨中國IC設計成就獎頒獎典禮成功舉辦,人工智能視覺芯片研發(fā)及基礎算力平臺公司“愛芯元智”出席峰會 。會上,圍繞“20年,砥礪前行”峰會主題,半導體業(yè)界專家和企業(yè)領袖、中國電子和IC設計行業(yè)資深工程師、技術和供應鏈專業(yè)人士,以及企業(yè)高管們共同回顧了中國半導體產(chǎn)業(yè)20 年來的發(fā)展歷程,并一齊探討中國半導體下一個十年的發(fā)展之路。 愛芯元智憑借在AI視覺芯片賽道的強大自研實力和突出落地成果,榮獲“2022中國IC設計成就獎之年度新銳初創(chuàng)IC設計公司”獎。 由AspenCor
[嵌入式]
愛芯元智榮獲<font color='red'>IIC</font>“年度新銳初創(chuàng)IC設計公司”獎,并入選TOP10 AI芯片公司
MSP430F5529LP(一)IICOLED的HELLOWRLD
簡單理解下什么是IIC I2C(Inter-Integrated Circuit BUS) 集成電路總線,該總線由NXP(原PHILIPS)公司設計,多用于主控制器和從器件間的主從通信,在小數(shù)據(jù)量場合使用,傳輸距離短,任意時刻只能有一個主機等特性。 總線信號 :   SDA :串行數(shù)據(jù)線   SCL :串行時鐘 總線空閑狀態(tài) :   SDA :高電平   SCL :高電平 起始位:SCL為高電平期間 SDA出現(xiàn)下降沿 終止位:SCL為高電平期間 SDA出現(xiàn)上升沿 數(shù)據(jù)傳輸 :SDA的數(shù)據(jù)在SCL高電平期間被寫入從機。所以SDA的數(shù)據(jù)變化要發(fā)生在SCL低電平期間。 先簡單寫出IIC.h頭文件
[單片機]
MSP430F5529LP(一)<font color='red'>IIC</font>與<font color='red'>OLED</font>的HELLOWRLD
新唐M051 IIC使用程序
發(fā)一個新唐M051單片機的 IIC使用的程序: #include "SmartM_M0.h" #define DEBUGMSG printf #define EEPROM_SLA 0xA0 #define EEPROM_WR 0x00 #define EEPROM_RD 0x01 #define I2C_CLOCK 13 #define PAGE_SIZE 8 /***************************************** *函數(shù)名稱:Timed_Write_Cycle *輸 入:無 *輸 出:無 *功 能:同步的寫周期 *
[單片機]
IIC-Taiwan/半導體商從基礎技術談節(jié)能設計
  “除了100%符合歐盟對鉛、汞、鎘等物質禁用指令外,我們2008年還要進一步達到無鹵、無氧化銻的‘Dark Green’目標,” 恩智浦(NXP)多重市場半導體大中華區(qū)市場資深行銷總監(jiān)梅潤平日前在2008年國際積體電路研討會暨展覽會(IIC-Taiwan)上,針對半導體產(chǎn)業(yè)朝向輕凈科技的發(fā)展做出了以上表示。   從制造到一項產(chǎn)品的生命終止,其中充滿了許多可以努力,使該產(chǎn)品更環(huán)保的空間,梅潤平強調,許多終端產(chǎn)品是可以更綠色、對環(huán)境更友善的。   例如,LED在許多領域都可實現(xiàn)更節(jié)能的設計,包括照明、背光等?!拔覀冋谂c多家LCD TV制造商以及LED供應商合作,開發(fā)一種‘side LED’的新應用,”梅潤平說。他解釋道,該技
[焦點新聞]
基于IIC1.0的時鐘芯片應用程序設計
摘要:在對串行實時時鐘芯片X1203內(nèi)部結構和工作特性作基本介紹的基礎上,設計出用單片機的通用I/O口線虛擬I2C總線來實現(xiàn)與時鐘芯片的串行接口電路以及利用虛擬I2C總線軟件包VIIC設計時鐘芯片1203的應用程序。 關鍵詞:單片機 實時時鐘 虛擬I2C總線 實時時鐘是微機測控系統(tǒng)中的一個重要組成部分。美國Xicor公司推出的串行接口實時時鐘芯片X1203提供備用電源輸入引腳,使器件能用非可重新充電電池任務用電源。該芯片以其體積小、功耗低、使用簡單、接口容易、與單片機連線少為主要特點,同時具有較高的精度,能很好滿足微機測控系統(tǒng)的求。下面具體介紹該芯片的內(nèi)部結構、工作特性、與51系列單片機接口設計實例以及如何利用虛擬I2C總線軟件包
[應用]
Windows Embedded力拓培訓和認證計劃
2月26日,在第14屆中國國際集成電路研討會暨展覽會(IIC-China)上,微軟公司宣布將擴大其Windows Embedded產(chǎn)品系列的培訓課件和認證計劃。除了公布其最新的培訓和認證計劃外,微軟Windows Embedded還在展會現(xiàn)場展示其產(chǎn)品系列,包括最新發(fā)布的Windows Embedded POSReady 2009產(chǎn)品——針對提供 POS 解決方案的原始設備制造商(OEM)和使用 POS 設備的企業(yè),進行特別優(yōu)化的嵌入式操作系統(tǒng)。 據(jù)IDC中國2009年1月7日的報告預測,雖然遭受全球經(jīng)濟危機,中國IT市場預計仍將以高于其他國家的比率增長?!坝捎谥袊?萬億元人民幣的投資,發(fā)展中國的通信、醫(yī)療、汽
[嵌入式]
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 明水县| 故城县| 青河县| 阳春市| 长沙县| 扎囊县| 治县。| 涞水县| 富锦市| 揭东县| 科技| 南安市| 确山县| 西丰县| 汕头市| 威宁| 屏南县| 黄大仙区| 和田县| 肥东县| 锡林浩特市| 佛坪县| 晴隆县| 和平县| 义马市| 靖江市| 岫岩| 江口县| 汤阴县| 桦南县| 同心县| 浠水县| 长治市| 沿河| 常德市| 甘南县| 乌什县| 扶沟县| 嘉义县| 安陆市| 成都市|