国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

國民技術(shù)N32G430開發(fā)筆記(18)- I2C1 從機(jī)收發(fā)數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了國民技術(shù)N32G430開發(fā)筆記(18)- I2C1 從機(jī)收發(fā)數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

I2C1 從機(jī)收發(fā)數(shù)據(jù)

1、將PB6 PB7設(shè)置為i2c從機(jī),跟android板卡通訊。
2、Android發(fā)送
寫命令:
0x05 0x02 0x00 0x00 checksum
n32將收到的命令打印出來
讀版本命令:
0x01 0x02 0x00 0x00 checksum
n32將app_version返回電視端
3、i2c從機(jī)配置,采用中斷方式收發(fā)數(shù)據(jù)。

主要代碼:
從機(jī)配置代碼:

/**
 * 從模式采用中斷
*/
MI_BOOL i2c1_slave_init(void)
{
    I2C_InitType i2c1_slave;
    GPIO_InitType i2c1_gpio;
    NVIC_InitType NVIC_InitStructure;

    RCC_APB1_Peripheral_Clock_Enable(RCC_APB1_PERIPH_I2C1);
    RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOB);

    GPIO_Structure_Initialize(&i2c1_gpio);
    /*PB6 -- SCL; PB7 -- SDA*/
    i2c1_gpio.Pin        = GPIO_PIN_6 | GPIO_PIN_7;
    i2c1_gpio.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST; 
    i2c1_gpio.GPIO_Mode      = GPIO_MODE_AF_OD;
    i2c1_gpio.GPIO_Alternate = GPIO_AF2_I2C1;
    GPIO_Peripheral_Initialize(GPIOB, &i2c1_gpio);

    I2C_Reset(I2C1);
    I2C_Initializes_Structure(&i2c1_slave);
    i2c1_slave.BusMode     = I2C_BUSMODE_I2C;
    i2c1_slave.DutyCycle   = I2C_SMDUTYCYCLE_1;
    i2c1_slave.OwnAddr1    = I2C1_SLAVE_ADDR;
    i2c1_slave.AckEnable   = I2C_ACKEN;
    i2c1_slave.AddrMode    = I2C_ADDR_MODE_7BIT;
    i2c1_slave.ClkSpeed    = 100000; /* 100K */

    I2C_Initializes(I2C1, &i2c1_slave);
    /* int enable */
    I2C_Interrupts_Enable(I2C1, I2C_INT_EVENT | I2C_INT_BUF | I2C_INT_ERR);
    
    NVIC_Priority_Group_Set(NVIC_PER0_SUB4_PRIORITYGROUP);
    NVIC_InitStructure.NVIC_IRQChannel                   = I2C1_EV_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Initializes(&NVIC_InitStructure);
    NVIC_InitStructure.NVIC_IRQChannel                   = I2C1_ER_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Initializes(&NVIC_InitStructure);

    I2C_ON(I2C1);
    return MI_TRUE;
}     		

中斷處理函數(shù):

void I2C1_EV_IRQHandler(void)
{
    uint8_t timeout_flag = 0;
    uint32_t last_event = 0;
    
    
    last_event = I2C_Last_Event_Get(I2C1);

    if ((last_event & I2C_ROLE_MASTER) != I2C_ROLE_MASTER) /* MSMODE = 0:I2C slave mode */
    {
        switch (last_event)
        {
        case I2C_EVT_SLAVE_RECV_ADDR_MATCHED: /*0x00020002.EV1 Rx addr matched */
            /* clear flag,ready to receive data */
            rxDataNum = 0;
            break;
        case I2C_EVT_SLAVE_SEND_ADDR_MATCHED: /*0x00060082.EV1 Tx addr matched */
            send_i2c_message(rxData,rxDataNum);
            txDataNum = 0;
            I2C1->DAT = txData[txDataNum++];/* Send first data */
            break;
        /* SlaveTransmitter	 */
        case I2C_EVT_SLAVE_DATA_SENDING:  /*0x00060080. EV3 Sending data */
            //printf("I2C_EVT_SLAVE_DATA_SENDING\r\n");
            break;
        case I2C_EVT_SLAVE_DATA_SENDED:
            I2C1->DAT = txData[txDataNum++];
            break;
        /* SlaveReceiver */
        case I2C_EVT_SLAVE_DATA_RECVD: /*0x00020040.EV2 one byte recved */
            rxData[rxDataNum++] = I2C1->DAT;
            break;
        case I2C_EVT_SLAVE_STOP_RECVD: /* 0x00000010 EV4 */
            I2C_ON(I2C1);   
            handle_i2c_message(rxData,rxDataNum);
            break;
        default:
            I2C_ON(I2C1);
            timeout_flag = 1;
            break;
        }
    }
    
    if (timeout_flag)
    {
        if ((I2CTimeout--) == 0)
        {
            //CommTimeOut_CallBack(SLAVE_UNKNOW);
        }
    }
    else
    {
        I2CTimeout = I2CT_LONG_TIMEOUT;
    }
       
}


void I2C1_ER_IRQHandler(void)
{
    uint32_t last_event;
    last_event = I2C_Last_Event_Get(I2C1);
    if(last_event == I2C_EVT_SLAVE_ACK_MISS)   
    {   
        I2C_Flag_Status_Clear(I2C1, I2C_FLAG_ACKFAIL);
        if(rxDataNum != 0)  /*slave send the last data and recv NACK  */
        {
            //flag_slave_send_finish = 1;
        }
        else /*not the last data recv nack, send fail */
        {
        }
    }
}	

接收到數(shù)據(jù)都放在 send_i2c_message跟handle_i2c_message函數(shù)中處理。

MI_BOOL send_i2c_message(MI_U8 *p_buff,MI_U32 len)
{
    switch (p_buff[UART_CMD_INDEX])
    {
    case I2C_GET_SYSTEM_VERSION_CMD/* constant-expression */:
        /* 獲取系統(tǒng)版本號(hào) */
        if (calculate_checksum_and_length(p_buff,len) == MI_TRUE)
        {
            MI_CHAR version[48] = {0};
            system_info_get_app_version(version);
            memset(txData,0,I2C_SEND_REC_DATA_LENGTH);
            memcpy(txData,version,strlen(version));
            printf("get version = %s\r\n",version);
        }
        break;
    default:
        break;
    }    
    return MI_TRUE;
}

MI_BOOL handle_i2c_message(MI_U8 *p_buff,MI_U32 len)
{
    if(p_buff != 0)
    {
        for(int i=0;i<len;i++)
        {
            printf("0x%02x " ,p_buff[i]);
        }
        printf("\r\n");
    }
    return MI_TRUE;
}

main.c中增加收發(fā)buffer的定義

uint16_t rxDataNum = 0;
uint8_t rxData[I2C_SEND_REC_DATA_LENGTH] = {0};
uint8_t txData[I2C_SEND_REC_DATA_LENGTH] = {0};
uint16_t txDataNum = 0;

main.h

#define I2C_SEND_REC_DATA_LENGTH 256

extern uint16_t rxDataNum;
extern uint8_t rxData[I2C_SEND_REC_DATA_LENGTH];
extern uint8_t txData[I2C_SEND_REC_DATA_LENGTH] ;
extern uint16_t txDataNum ;	

4、Android App運(yùn)行效果圖:

國民技術(shù)N32G430開發(fā)筆記(18)- I2C1 從機(jī)收發(fā)數(shù)據(jù)

5、N32打印接收數(shù)據(jù)如圖:
國民技術(shù)N32G430開發(fā)筆記(18)- I2C1 從機(jī)收發(fā)數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-437585.html

到了這里,關(guān)于國民技術(shù)N32G430開發(fā)筆記(18)- I2C1 從機(jī)收發(fā)數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 國民技術(shù) MCU N32單片機(jī)所有系列---JLink添加芯片,方便使用Keil和JFlash

    國民技術(shù) MCU N32單片機(jī)所有系列---JLink添加芯片,方便使用Keil和JFlash

    1.將下圖JLink tool adds Nations chip V1.0.12文件中選中的文件復(fù)制到自己電腦的JLINK的目錄下(JLINK默認(rèn)的下載路徑是C:Program FilesSEGGERJLink? ?或者? C:Program Files(x86)SEGGERJLink) 2.然后直接把JLink tool adds Nations chip V1.0.12文件中的JLinkDevices.xml復(fù)制替換到自己電腦的JLINK的目錄下的JLin

    2024年02月03日
    瀏覽(19)
  • 【國名技術(shù)】N32G401單片機(jī)驅(qū)動(dòng)配置(STM32系列適用)

    【國名技術(shù)】N32G401單片機(jī)驅(qū)動(dòng)配置(STM32系列適用)

    N32G401總體上和STM32F4系列差不多,無論是從芯片資源,還是各種寄存器,都有相通之處,所以N32G401的所有驅(qū)動(dòng),如果使用smt32的話也可以借鑒使用(修改函數(shù)名) 文章代碼僅限于參考,如果直接CV是肯定用不了的,源代碼鏈接在最后 PS:所有驅(qū)動(dòng)基于N32G401F7S8-1,一共20個(gè)引腳,

    2024年01月19日
    瀏覽(63)
  • 【N32G457】 基于RT-Thread和N32G457的迷你鍵盤

    【N32G457】 基于RT-Thread和N32G457的迷你鍵盤

    此文為參加RT-Thread與國民技術(shù)聯(lián)手推出N32G457 RT-Thread設(shè)計(jì)大賽期間作品。 由于疫情影響加上其他各種原因,本應(yīng)在3月25日結(jié)束的比賽在今日終于完成了一個(gè)比較完整的作品,無論是否可以參賽,還是希望對(duì)大家有所幫助。 先放個(gè)圖。 機(jī)械鍵盤在最近幾年發(fā)展迅猛,功能也逐

    2024年02月09日
    瀏覽(22)
  • 單片機(jī)移植freemodbus主機(jī)(STM32、GD32、瑞薩、國民技術(shù)等)

    單片機(jī)移植freemodbus主機(jī)(STM32、GD32、瑞薩、國民技術(shù)等)

    從github下載:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 無法下載或者下載太慢可以用資源下載,無需積分。freeModbus主機(jī)源碼下載 示例代碼 參考從機(jī)代碼創(chuàng)建 將FreeModbus主機(jī)源代碼拷貝到工程中間件-第三方庫-freemodbus源碼庫:即MiddlewaresThird_PartyFreeModbusMaster文件夾中。

    2024年02月11日
    瀏覽(32)
  • 國民技術(shù)N32_MCU ADC如何獲取高精度采樣數(shù)據(jù)

    國民技術(shù)N32_MCU ADC如何獲取高精度采樣數(shù)據(jù)

    國民技 術(shù) 微控制器內(nèi)置最多四個(gè)高級(jí) 12 位 ADC ?? (取決于產(chǎn)品系列) ,具有校準(zhǔn)功能,用于提高環(huán)境條件 ? 變 化時(shí)的 ADC ? 精度。 在涉及模數(shù)轉(zhuǎn) 換的應(yīng)用中, ? ADC ? 精度會(huì)影響整體的系統(tǒng)質(zhì)量和效率。為了提高此精度,必須了解與 ADC 相 關(guān) 的誤差以及影響它們的參數(shù)。

    2024年02月09日
    瀏覽(95)
  • 【N32L40X】學(xué)習(xí)筆記10-外部觸發(fā)方式計(jì)數(shù)

    【N32L40X】學(xué)習(xí)筆記10-外部觸發(fā)方式計(jì)數(shù)

    也就是外部時(shí)鐘源模式2 此模式由 TIMx_SMCTRL .EXCEN 選擇等于 1。計(jì)數(shù)器可以在外部觸發(fā)輸入 ETR 的每個(gè)上升沿或下降沿 計(jì)數(shù)。 極性選擇 分頻選擇 過濾選擇 選擇外部時(shí)鐘ETR模式 bsp_time_counter_ETR.h

    2024年02月16日
    瀏覽(50)
  • STM32G071開發(fā)筆記:使用定時(shí)器(TRGO功能)觸發(fā)ADC規(guī)則采樣以避免低側(cè)電流采樣所帶來的PWM開關(guān)噪聲

    STM32G071開發(fā)筆記:使用定時(shí)器(TRGO功能)觸發(fā)ADC規(guī)則采樣以避免低側(cè)電流采樣所帶來的PWM開關(guān)噪聲

    目錄 背景闡述: 導(dǎo)致問題的原因: 解決方案: 實(shí)驗(yàn)方案: 實(shí)驗(yàn)驗(yàn)證: 可改進(jìn)的地方 結(jié)尾 RT:筆者在做一個(gè)項(xiàng)目的時(shí)候遇到了一個(gè)因?yàn)镻WM開關(guān)噪聲干擾導(dǎo)致ADC采樣波動(dòng)大的問題,經(jīng)過2天的研究終于想到了一個(gè)比較好的辦法,這個(gè)方法不一定適合所有項(xiàng)目,但和我當(dāng)前項(xiàng)目

    2024年01月25日
    瀏覽(98)
  • 【N32L40X】學(xué)習(xí)筆記08-定時(shí)器的基本定時(shí)功能-超時(shí)功能

    該函數(shù)庫的目的就是在統(tǒng)一的地方配置,將配置的不同項(xiàng)放置在一個(gè)結(jié)構(gòu)體內(nèi)部 使用一個(gè)枚舉來定義一個(gè)的別名 該庫就是基本定時(shí)產(chǎn)生超時(shí)中斷 bsp_time_base.h

    2024年02月16日
    瀏覽(55)
  • 【N32L40X】學(xué)習(xí)筆記11-ADC規(guī)則通道采集+dma數(shù)據(jù)傳輸

    【N32L40X】學(xué)習(xí)筆記11-ADC規(guī)則通道采集+dma數(shù)據(jù)傳輸

    支持 1 個(gè) ADC,支持單端輸入和差分輸入,最多可測量 16 個(gè)外部和 3 個(gè)內(nèi)部源。 支持 12 位、10 位、8 位、6 位分辨率。 ADC 時(shí)鐘源分為 工作時(shí)鐘源、采樣時(shí)鐘源和計(jì)時(shí)時(shí)鐘源 僅可配置 AHB_CLK 作為 工作時(shí)鐘源 。 可配置 PLL 作為 采樣時(shí)鐘源 ,最高可到 64MHz,支持分頻 1,2,4,6,8,

    2024年02月15日
    瀏覽(30)
  • 【STC32G12K128開發(fā)板】——搭建開發(fā)環(huán)境

    【STC32G12K128開發(fā)板】——搭建開發(fā)環(huán)境

    版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上原文出處鏈接。 今天介紹下STC32G12K128開發(fā)板如何搭建開發(fā)環(huán)境。 表1:需要的工具軟件 Keil C251 v5.60安裝文件:“…第2部分:開發(fā)軟件工具 1 - KEIL C251安裝軟件”目錄下的“c251v560”。 ch341ser驅(qū)動(dòng):“…第2部分:開發(fā)軟件工具

    2024年01月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包