請(qǐng)問 有這篇文章的 I2C--主從機(jī)的中斷收發(fā) 完整程序 或 類似程序 嗎?

最近 學(xué)習(xí) I2C 主從機(jī)中斷 或 DMA 中斷? 連續(xù)收送數(shù)據(jù),一直沒掌握。找到這篇 文章,沒有完整程序,請(qǐng)問 官方 有類似完整程序 可以發(fā)我下嗎

11111111111111.jpg22222222222.jpg3333333333.jpg



熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

icon_rar.gifV203C8-IIC主中斷發(fā)-從中斷收.zip

icon_rar.gifV203C8-IIC主中斷收-從中斷發(fā).zip

你好,參考


請(qǐng)教 下 楊工,? 怎樣 向? 中斷發(fā)送 傳入 需要 發(fā)送的 變化 數(shù)據(jù)?? ?我嘗試各種方法,不得要領(lǐng).


試了下面方法,不行。

int main(void)

{

? ? Delay_Init();

? ? USART_Printf_Init( 115200 );

? ? printf( "SystemClk:%d\r\n", SystemCoreClock );

? ? printf("IIC Host mode\r\n");

? ? IIC_Init( 80000, TxAdderss);? ? //IIC波特率:80kHz,自身地址最后一位為0,進(jìn)入主發(fā)送器模式

? ? iic_int();


? ? while(1){

? ? ? ? TxData[5] = TxData[5] + 1;

? ? ? ? if(TxData[5] > 200){

? ? ? ? ? ?TxData[5] = 0;

? ? ? ? }

? ? ? ? while( I2C_GetFlagStatus( I2C1, I2C_FLAG_BUSY ) != RESET );

? ? ? ? I2C_GenerateSTART(I2C1, ENABLE);? ?// 生成I2Cx通信START條件

? ? ? ? Delay_Ms(600);

? ? }

}



你好,開啟第二次傳輸直接產(chǎn)生起始位就可以了,如圖是在我上面主中斷發(fā)例程基礎(chǔ)上加的,傳輸完重新對(duì)數(shù)組賦值就好了,可觀察到從機(jī)一直在接收數(shù)據(jù)

image.pngimage.png


明白了,非常感謝。


還需 在? 麻煩 請(qǐng)教 下 楊工,? 那么 官方 I2C DMA 主機(jī)發(fā)送數(shù)據(jù)例程,怎樣 修改,才可以 能 循環(huán)發(fā)送數(shù)據(jù)啊。? ?我這樣放在循環(huán)中,只有每次 重啟 才發(fā) 一次數(shù)據(jù)1111111111111.jpg


和上面基本一致,需要啟動(dòng)二次傳輸時(shí)先關(guān)閉DMA通道,然后給DMA傳入要發(fā)送的數(shù)據(jù),主機(jī)端產(chǎn)生起始信號(hào),判斷EV5,EV6事件,也就是起始位發(fā)送標(biāo)志位和地址匹配標(biāo)志成立后即可再次啟動(dòng)DMA的傳輸。


不好意思 楊工,我是半路出家,不太懂專業(yè)名詞,都是 靠著 興趣? 依葫蘆畫瓢 學(xué)習(xí)的。? 我剛嘗試 你 說的,編排下 程序 還是不行。 能再麻煩你 幫我 把??while(1) 內(nèi)程序? 循環(huán)改一下,讓 I2C 能夠 循環(huán) 發(fā)出 傳入的數(shù)據(jù)嗎???

int main(void)

{

? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

? ? Delay_Init();

? ? USART_Printf_Init(115200);

? ? printf("SystemClk:%d\r\n", SystemCoreClock);

? ? printf("IIC Host mode\r\n");

? ? DMA_Tx_Init( DMA1_Channel6, (u32) &I2C1->DATAR, (u32) TxData, Tize);? ?//DMA初始化

? ? IIC_Init(10000, TxAdderss);? ?//I2C進(jìn)行主機(jī)初始化配置

? ? while(1) {

? ? ? ?DMA_Cmd(DMA1_Channel6, DISABLE);? ? ? ? ? ? ? ? // 關(guān)閉DMA1_Channel6不再發(fā)送數(shù)據(jù)

? ? ?//? ?I2C_GenerateSTART( I2C1, ENABLE );

? ? ? ? TxData[6] = TxData[6] + 1;

? ? ? ? ? ? ?if(TxData[6] > 230) {

? ? ? ? ? ? ? ? ?TxData[6] = 0;

? ? ? ? ? ? ?}

? ? ? ? while( I2C_GetFlagStatus( I2C1, I2C_FLAG_BUSY ) != RESET ); //檢查是否設(shè)置了指定I2C標(biāo)志

? ? ? ? I2C_GenerateSTART( I2C1, ENABLE );//? //開啟I2C1通信起始信號(hào)

? ? ? ? //當(dāng)最后一個(gè)事件為I2C_EVENT_MASTER_MODE_SELECT事件時(shí),說明選擇I2C作為主機(jī)模式,跳過此while循環(huán),進(jìn)行下一步

? ? ? ? while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT ) );//檢查最后一個(gè)I2Cx事件是否等于作為參數(shù)傳遞的事件

? ? ? ? //發(fā)送地址來選擇從機(jī)設(shè)備

? ? ? ? I2C_Send7bitAddress( I2C1, 0x02, I2C_Direction_Transmitter );

? ? ? ? //當(dāng)最后一個(gè)事件為I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED事件時(shí),說明選擇I2C進(jìn)行主機(jī)發(fā)送,跳過此while循環(huán),進(jìn)行下一步數(shù)據(jù)發(fā)送

? ? ? ? while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ) );

? ? ? ? DMA_Cmd( DMA1_Channel6, ENABLE );? //? //使能開啟DMA1通道6,進(jìn)行數(shù)據(jù)發(fā)送

? ? ? ? //當(dāng)最后一個(gè)事件為I2C_EVENT_MASTER_BYTE_TRANSMITTED事件時(shí),說明發(fā)送結(jié)束,跳過此while循環(huán),進(jìn)行下一步

? ? ? ? while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) );

? ? ? ? I2C_GenerateSTOP( I2C1, ENABLE );? // //開啟I2C通信停止信號(hào)


? ? ? ? printf(" ***************************? \r\n");

? ? ? ? Delay_Ms(500);

? ? }

}

icon_rar.gifmain.zip



參考,接收用之前發(fā)的例程即可

image.png


?多謝你耐心的 指導(dǎo),在配合 看下 DMA 功能描述

3) 在 DMA_CNTRx 寄存器中設(shè)置要傳輸?shù)臄?shù)據(jù)數(shù)量。在每個(gè)數(shù)據(jù)傳輸后,這個(gè)數(shù)值遞減

就 豁然開朗了。? ?再次 感謝 你耐心的指導(dǎo)。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频