Пт янв 19, 2018 12:57:48
#include "stm32f10x.h"
#define OLED_ADDR 0x78
uint8_t i2c2_data[512]={1,2,3,4};
int16_t i2c2_cnt;
void I2C2_INIT(){
RCC->APB1ENR |= RCC_APB1ENR_I2C2EN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN;
GPIOB->CRH |= GPIO_CRH_CNF10 | GPIO_CRH_MODE10 | GPIO_CRH_CNF11 | GPIO_CRH_MODE11; //PB10, PB11 - OD, AF
I2C2->CR1 |= I2C_CR1_SWRST;
I2C2->CR1 &= ~I2C_CR1_SWRST;
I2C2->CR2 = 36 | I2C_CR2_ITEVTEN;
I2C2->CCR = I2C_CCR_FS | 30;
I2C2->TRISE = 25;
I2C2->CR1 |= I2C_CR1_PE;
NVIC_EnableIRQ(I2C2_EV_IRQn);
}
void I2C_Write_massive(){
I2C2->CR1 |= I2C_CR1_START;
}
int main(void){
I2C2_INIT();
while(1)
{
I2C_Write_massive(3);
for(uint32_t i=0; i<360000; i++);
}
}
void I2C2_EV_IRQHandler(){
volatile uint32_t sr1 = I2C2->SR1, sr2 = I2C2->SR2;
if(sr1 & I2C_SR1_SB ){
I2C2->DR = OLED_ADDR;
}
//---------- передача данных-------------------------------
if((sr1 & I2C_SR1_TXE)){
if(i2c2_cnt < 4){
I2C2->DR = i2c2_data[i2c2_cnt++];
}
else{
i2c2_cnt = 0;
I2C2->CR1 |= I2C_CR1_STOP;
}
}
//----------
}
Пт янв 19, 2018 13:09:32
Пт янв 19, 2018 13:26:03
i2c2_data[512]={0x78,1,2,3,4};
if(sr1 & I2C_SR1_SB ){
I2C2->DR = i2c2_data[0];
}
if(sr1 & I2C_SR1_SB ){
i2c2_cnt = 0;
I2C2->DR = OLED_ADDR;
}