TI中文支持网
TI专业的中文技术问题搜集分享网站

MSPM0G3507: OLED I2C通信

Part Number:MSPM0G3507Other Parts Discussed in Thread:SYSCONFIG,

在SYSCONFIG配置时使用I2C时SCL和SDA引脚都是输入模式,但是如果是controller mode 下应该是输出模式,并且这种情况是默认无法修改的 

起因是 我想用I2C与OLED通信,但是无法实现,我发现SPI设置是正常的输出模式。

同时我想请各位大佬帮我看看我的代码对不对,主要是向控制器写命令的函数我不太确定

void Write_IIC_Byte(unsigned char IIC_Byte)
{
    DL_I2C_transmitControllerData(I2C1, IIC_Byte);
}

灰常感谢各位

Ben Qin:

你好,

ty s 说:void Write_IIC_Byte(unsigned char IIC_Byte)
{
    DL_I2C_transmitControllerData(I2C1, IIC_Byte);
}

void DL_I2C_transmitControllerData(I2C_Regs *i2c, uint8_t data),第二个参数属性应该是uint8_t.

ty s 说:在SYSCONFIG配置时使用I2C时SCL和SDA引脚都是输入模式,但是如果是controller mode 下应该是输出模式,

确实无法修改,但是这里输入输出应该是都可以。

你可以参考下SDK中的例程:mspm0_sdk_1_20_01_06\examples\nortos\LP_MSPM0G3507\driverlib\i2c_controller_rw_multibyte_fifo_interrupts

,

ty s:

您好,非常感谢您的回复,但是我已经检查了所有例程,基本上都是这样的,我发现下方有自定义引脚,里面可以选择invert选项,按照软件的解释应该是输入转输出,但是这依旧无法解决我OLED亮不了的情况,同时非常感谢您对我代码的建议

以下是我的OLED.c文件

#include "oled.h"// the storage format is as follow
//[0]0 1 2 3 ... 127
//[1]0 1 2 3 ... 127
//[2]0 1 2 3 ... 127
//[3]0 1 2 3 ... 127
//[4]0 1 2 3 ... 127
//[5]0 1 2 3 ... 127
//[6]0 1 2 3 ... 127
//[7]0 1 2 3 ... 127
/**********************************************
//IIC Start
**********************************************/
void IIC_Start()
{OLED_SCLK_Set();OLED_SDIN_Set();OLED_SDIN_Clr();OLED_SCLK_Clr();
}/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{OLED_SCLK_Set();//OLED_SCLK_Clr();OLED_SDIN_Clr();OLED_SDIN_Set();
}void IIC_Wait_Ack()
{OLED_SCLK_Set();OLED_SCLK_Clr();
}
/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(uint8_t IIC_Byte)
{DL_I2C_transmitControllerData(I2C1, IIC_Byte);//unsigned char i;//unsigned char m, da;// 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();//delay_us(100);//OLED_SCLK_Clr();// }
}
/**********************************************
// IIC Write Command
**********************************************/
void OLED_WR_CMD(unsigned char IIC_Command)
{IIC_Start();Write_IIC_Byte(0x78); // Slave address,SA0=0IIC_Wait_Ack();Write_IIC_Byte(0x00); // write commandIIC_Wait_Ack();Write_IIC_Byte(IIC_Command);IIC_Wait_Ack();IIC_Stop();
}
/**********************************************
// IIC Write Data
**********************************************/
void OLED_WR_DATA(unsigned char IIC_Data)
{IIC_Start();Write_IIC_Byte(0x78); // D/C#=0; R/W#=0IIC_Wait_Ack();Write_IIC_Byte(0x40); // write dataIIC_Wait_Ack();Write_IIC_Byte(IIC_Data);IIC_Wait_Ack();IIC_Stop();
}uint8_t CMD_Data[] = {0xAE, 0xD5, 0x80, 0xA8, 0x3F, 0xD3, 0x00, 0x40, 0xA1, 0xC8, 0xDA,0x12, 0x81, 0xCF, 0xD9, 0xF1, 0xDB, 0x40, 0xA4, 0xA6, 0x8D, 0x14,0xAF};/*** @function: void OLED_Init(void)* @description: OLED初始化* @return {*}*/
void OLED_Init(void)
{delay_ms(200);uint8_t i = 0;for (i = 0; i < 23; i++){OLED_WR_CMD(CMD_Data[i]);}
}/*** @function: void OLED_PartClear(void)* @description: 局部清除* @return {*}*/
void OLED_PartClear(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1)
{uint8_t x = 0, y = 0;if (y1 % 8 == 0)y = y1 / 8;elsey = y1 / 8 + 1;for (y = y0; y < y1; y++){OLED_Set_Pos(x0, y);for (x = x0; x < x1; x++){OLED_WR_DATA(0);}}
}/*** @function: OLED_Clear(void)* @description: 清屏,整个屏幕是黑色的!和没点亮一样!!!* @return {*}*/
void OLED_Clear(void)
{uint8_t i, n;for (i = 0; i < 8; i++){OLED_WR_CMD(0xb0 + i); // 设置页地址(0~7)OLED_WR_CMD(0x00);// 设置显示位置—列低地址OLED_WR_CMD(0x10);// 设置显示位置—列高地址for (n = 0; n < 128; n++){OLED_WR_DATA(0);}}
}/*** @function: void OLED_Display_On(void)* @description: 开启OLED显示* @return {*}*/
void OLED_Display_On(void)
{OLED_WR_CMD(0X8D); // SET DCDC命令OLED_WR_CMD(0X14); // DCDC ONOLED_WR_CMD(0XAF); // DISPLAY ON,打开显示
}/*** @function: void OLED_Display_Off(void)* @description: 关闭OLED显示* @return {*}*/
void OLED_Display_Off(void)
{OLED_WR_CMD(0X8D); // SET DCDC命令OLED_WR_CMD(0X10); // DCDC OFFOLED_WR_CMD(0XAE); // DISPLAY OFF,关闭显示
}/*** @function: void OLED_Set_Pos(uint8_t x, uint8_t y)* @description: 坐标设置* @param {uint8_t} x,y* @return {*}*/
void OLED_Set_Pos(uint8_t x, uint8_t y)
{OLED_WR_CMD(0xb0 + y);// 设置页地址(0~7)OLED_WR_CMD(((x & 0xf0) >> 4) | 0x10); // 设置显示位置—列高地址OLED_WR_CMD(x & 0x0f);// 设置显示位置—列低地址
}/*** @function: unsigned int oled_pow(uint8_t m,uint8_t n)* @description: m^n函数* @param {uint8_t} m,n* @return {unsigned int} result*/
unsigned int oled_pow(uint8_t m, uint8_t n)
{unsigned int result = 1;while (n--)result *= m;return result;
}/*** @function: void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr, uint8_t Char_Size,uint8_t Color_Turn)* @description: 在OLED12864特定位置开始显示一个字符* @param {uint8_t} x字符开始显示的横坐标* @param {uint8_t} y字符开始显示的纵坐标* @param {uint8_t} chr待显示的字符* @param {uint8_t} Char_Size待显示字符的字体大小,选择字体 16/12* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/
void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr, uint8_t Char_Size, uint8_t Color_Turn)
{unsigned char c = 0, i = 0;c = chr - ' '; // 得到偏移后的值if (x > 128 - 1){x = 0;y = y + 2;}if (Char_Size == 16){OLED_Set_Pos(x, y);for (i = 0; i < 8; i++){if (Color_Turn)OLED_WR_DATA(~F8X16[c * 16 + i]);elseOLED_WR_DATA(F8X16[c * 16 + i]);}OLED_Set_Pos(x, y + 1);for (i = 0; i < 8; i++){if (Color_Turn)OLED_WR_DATA(~F8X16[c * 16 + i + 8]);elseOLED_WR_DATA(F8X16[c * 16 + i + 8]);}}else{OLED_Set_Pos(x, y);for (i = 0; i < 6; i++){if (Color_Turn)OLED_WR_DATA(~F6x8[c][i]);elseOLED_WR_DATA(F6x8[c][i]);}}
}/*** @function: void OLED_ShowString(uint8_t x, uint8_t y, uint8_t *chr, uint8_tChar_Size, uint8_t Color_Turn)* @description: 在OLED12864特定位置开始显示字符串* @param {uint8_t} x待显示字符串的开始横坐标x:0~127* @param {uint8_t} y待显示字符串的开始纵坐标 y:0~7,若选择字体大小为16,则两行数字之间需要间隔2,若选择字体大小为12,间隔1* @param {uint8_t} *chr待显示的字符串* @param {uint8_t} Char_Size待显示字符串的字体大小,选择字体 16/12,16为8X16,12为6x8* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/
void OLED_ShowString(uint8_t x, uint8_t y, char *chr, uint8_t Char_Size, uint8_t Color_Turn)
{uint8_t j = 0;while (chr[j] != '\0'){OLED_ShowChar(x, y, chr[j], Char_Size, Color_Turn);if (Char_Size == 12) // 6X8的字体列加6,显示下一个字符x += 6;else // 8X16的字体列加8,显示下一个字符x += 8;if (x > 122 && Char_Size == 12) // TextSize6x8如果一行不够显示了,从下一行继续显示{x = 0;y++;}if (x > 120 && Char_Size == 16) // TextSize8x16如果一行不够显示了,从下一行继续显示{x = 0;y++;}j++;}
}/*** @function: void OLED_ShowNum(uint8_t x,uint8_t y,unsigned int num,uint8_t len,uint8_t size2, Color_Turn)* @description: 显示数字* @param {uint8_t} x待显示的数字起始横坐标,x:0~126* @param {uint8_t} y待显示的数字起始纵坐标, y:0~7,若选择字体大小为16,则两行数字之间需要间隔2,若选择字体大小为12,间隔1* @param {unsigned int} num:输入的数据* @param {uint8_t } len:输入的数据位数* @param {uint8_t} size2:输入的数据大小,选择 16/12,16为8X16,12为6x8* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/
void OLED_ShowNum(uint8_t x, uint8_t y, unsigned int num, uint8_t len, uint8_t size2, uint8_t Color_Turn)
{uint8_t t, temp;uint8_t enshow = 0;for (t = 0; t < len; t++){temp = (num / oled_pow(10, len - t - 1)) % 10;if (enshow == 0 && t < (len - 1)){if (temp == 0){OLED_ShowChar(x + (size2 / 2) * t, y, ' ', size2, Color_Turn);continue;}elseenshow = 1;}OLED_ShowChar(x + (size2 / 2) * t, y, temp + '0', size2, Color_Turn);}
}/*** @function: void OLED_Showdecimal(uint8_t x,uint8_t y,float num,uint8_t z_len,uint8_t f_len,uint8_t size2, uint8_t Color_Turn)* @description: 显示正负浮点数* @param {uint8_t} x待显示的数字起始横坐标,x:0~126* @param {uint8_t} y待显示的数字起始纵坐标, y:0~7,若选择字体大小为16,则两行数字之间需要间隔2,若选择字体大小为12,间隔1* @param {float} num:输入的浮点型数据* @param {uint8_t } z_ len:整数部分的位数* @param {uint8_t } f_len: 小数部分的位数* @param {uint8_t} size2:输入的数据大小,选择 16/12,16为8X16,12为6x8* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/
void OLED_Showdecimal(uint8_t x, uint8_t y, float num, uint8_t z_len, uint8_t f_len, uint8_t size2, uint8_t Color_Turn)
{uint8_t t, temp, i = 0; // i为负数标志位uint8_t enshow;int z_temp, f_temp;if (num < 0){z_len += 1;i = 1;num = -num;}z_temp = (int)num;// 整数部分for (t = 0; t < z_len; t++){temp = (z_temp / oled_pow(10, z_len - t - 1)) % 10;if (enshow == 0 && t < (z_len - 1)){if (temp == 0){OLED_ShowChar(x + (size2 / 2) * t, y, ' ', size2, Color_Turn);continue;}elseenshow = 1;}OLED_ShowChar(x + (size2 / 2) * t, y, temp + '0', size2, Color_Turn);}// 小数点OLED_ShowChar(x + (size2 / 2) * (z_len), y, '.', size2, Color_Turn);f_temp = (int)((num - z_temp) * (oled_pow(10, f_len)));// 小数部分for (t = 0; t < f_len; t++){temp = (f_temp / oled_pow(10, f_len - t - 1)) % 10;OLED_ShowChar(x + (size2 / 2) * (t + z_len) + 5, y, temp + '0', size2, Color_Turn);}if (i == 1) // 如果为负,就将最前的一位赋值‘-’{OLED_ShowChar(x, y, '-', size2, Color_Turn);i = 0;}
}/*** @function: void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no, uint8_t Color_Turn)* @description: 在OLED特定位置开始显示16X16汉字* @param {uint8_t} x待显示的汉字起始横坐标x: 0~112,两列汉字之间需要间隔16* @param {uint8_t} y待显示的汉字起始纵坐标 y: 0~6 , 两行汉字之间需要间隔2* @param {uint8_t} no待显示的汉字编号* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/
void OLED_ShowCHinese(uint8_t x, uint8_t y, uint8_t no, uint8_t Color_Turn)
{uint8_t t = 0;OLED_Set_Pos(x, y);for (t = 0; t < 16; t++){if (Color_Turn)OLED_WR_DATA(~Hzk[2 * no][t]); // 显示汉字的上半部分elseOLED_WR_DATA(Hzk[2 * no][t]); // 显示汉字的上半部分}OLED_Set_Pos(x, y + 1);for (t = 0; t < 16; t++){if (Color_Turn)OLED_WR_DATA(~Hzk[2 * no + 1][t]); // 显示汉字的上半部分elseOLED_WR_DATA(Hzk[2 * no + 1][t]); // 显示汉字的上半部分}
}/*** @function: void OLED_DrawBMP(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *BMP,uint8_t Color_Turn)* @description: 在OLED特定区域显示BMP图片* @param {uint8_t} x0图像开始显示横坐标x0:0~127* @param {uint8_t} y0图像开始显示纵坐标y0:0~7* @param {uint8_t} x1图像结束显示横坐标x1:1~128* @param {uint8_t} y1图像结束显示纵坐标y1:1~8* @param {uint8_t} *BMP待显示的图像数据* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/
void OLED_DrawBMP(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *BMP, uint8_t Color_Turn)
{uint32_t j = 0;uint8_t x = 0, y = 0;if (y1 % 8 == 0)y = y1 / 8;elsey = y1 / 8 + 1;for (y = y0; y < y1; y++){OLED_Set_Pos(x0, y);for (x = x0; x < x1; x++){if (Color_Turn)OLED_WR_DATA(~BMP[j++]); // 显示反相图片elseOLED_WR_DATA(BMP[j++]); // 显示图片}}
}/*** @function: void OLED_HorizontalShift(uint8_t direction)* @description: 屏幕内容水平全屏滚动播放* @param {uint8_t} directionLEFT0x27RIGHT0x26* @return {*}*/
void OLED_HorizontalShift(uint8_t direction){OLED_WR_CMD(0x2e);// 停止滚动OLED_WR_CMD(direction); // 设置滚动方向OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(0x00);// 设置开始页地址OLED_WR_CMD(0x07);// 设置每个滚动步骤之间的时间间隔的帧频//0x00-5帧, 0x01-64帧, 0x02-128帧, 0x03-256帧, 0x04-3帧, 0x05-4帧, 0x06-25帧, 0x07-2帧,OLED_WR_CMD(0x07); // 设置结束页地址OLED_WR_CMD(0x00); // 虚拟字节设置,默认为0x00OLED_WR_CMD(0xff); // 虚拟字节设置,默认为0xffOLED_WR_CMD(0x2f); // 开启滚动-0x2f,禁用滚动-0x2e,禁用需要重写数据
}/*** @function: void OLED_Some_HorizontalShift(uint8_t direction,uint8_t start,uint8_t end)* @description: 屏幕部分内容水平滚动播放* @param {uint8_t} directionLEFT0x27RIGHT0x26* @param {uint8_t} start 开始页地址0x00~0x07* @param {uint8_t} end结束页地址0x01~0x07* @return {*}*/
void OLED_Some_HorizontalShift(uint8_t direction, uint8_t start, uint8_t end)
{OLED_WR_CMD(0x2e);// 停止滚动OLED_WR_CMD(direction); // 设置滚动方向OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(start);// 设置开始页地址OLED_WR_CMD(0x07);// 设置每个滚动步骤之间的时间间隔的帧频,0x07即滚动速度2帧OLED_WR_CMD(end);// 设置结束页地址OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(0xff);// 虚拟字节设置,默认为0xffOLED_WR_CMD(0x2f);// 开启滚动-0x2f,禁用滚动-0x2e,禁用需要重写数据
}/*** @function: void OLED_VerticalAndHorizontalShift(uint8_t direction)* @description: 屏幕内容垂直水平全屏滚动播放* @param {uint8_t} direction右上滚动0x29*左上滚动0x2A* @return {*}*/
void OLED_VerticalAndHorizontalShift(uint8_t direction)
{OLED_WR_CMD(0x2e);// 停止滚动OLED_WR_CMD(direction); // 设置滚动方向OLED_WR_CMD(0x01);// 虚拟字节设置OLED_WR_CMD(0x00);// 设置开始页地址OLED_WR_CMD(0x07);// 设置每个滚动步骤之间的时间间隔的帧频,即滚动速度OLED_WR_CMD(0x07);// 设置结束页地址OLED_WR_CMD(0x01);// 垂直滚动偏移量OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(0xff);// 虚拟字节设置,默认为0xffOLED_WR_CMD(0x2f);// 开启滚动-0x2f,禁用滚动-0x2e,禁用需要重写数据
}/*** @function: void OLED_DisplayMode(uint8_t mode)* @description: 屏幕内容取反显示* @param {uint8_t} directionON	0xA7,*OFF	0xA6	默认此模式,设置像素点亮* @return {*}*/
void OLED_DisplayMode(uint8_t mode)
{OLED_WR_CMD(mode);
}/*** @function: void OLED_IntensityControl(uint8_t intensity)* @description: 屏幕亮度调节* @param{uint8_t} intensity	0x00~0xFF,RESET=0x7F* @return {*}*/
void OLED_IntensityControl(uint8_t intensity)
{OLED_WR_CMD(0x81);OLED_WR_CMD(intensity);
}

这是我的oled.h

#ifndef __OLED_H
#define __OLED_H#include <ti_msp_dl_config.h>
#include "delay.h"
#include "oledfont.h"#define OLED_MODE 0
#define SIZE 8
#define XLevelL 0x00
#define XLevelH 0x10
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xFF
#define X_WIDTH 128
#define Y_WIDTH 64#define OLED_SCLK_Clr() DL_GPIO_clearPins(GPIO_I2C_SCL_PORT, GPIO_I2C_SCL_PIN) // CLK
#define OLED_SCLK_Set() DL_GPIO_setPins(GPIO_I2C_SCL_PORT, GPIO_I2C_SCL_PIN)#define OLED_SDIN_Clr() DL_GPIO_clearPins(GPIO_I2C_SDA_PORT, GPIO_I2C_SDA_PIN) // DIN
#define OLED_SDIN_Set() DL_GPIO_setPins(GPIO_I2C_SDA_PORT, GPIO_I2C_SDA_PIN)#define OLED_CMD 0
#define OLED_DATA 1// Functions to control OLED are as follows
void OLED_WR_CMD(uint8_t cmd);
void OLED_WR_DATA(uint8_t data);
void write_IIC_Byte(unsigned char IIC_Byte);
void OLED_Init(void);
void OLED_Clear(void);
void OLED_Display_On(void);
void OLED_Display_Off(void);
void OLED_Set_Pos(uint8_t x, uint8_t y);
void OLED_PartClear(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1);
void OLED_ShowNum(uint8_t x, uint8_t y, unsigned int num, uint8_t len, uint8_t size2, uint8_t Color_Turn);
void OLED_Showdecimal(uint8_t x, uint8_t y, float num, uint8_t z_len, uint8_t f_len, uint8_t size2, uint8_t Color_Turn);
void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr, uint8_t Char_Size, uint8_t Color_Turn);
void OLED_ShowString(uint8_t x, uint8_t y, char *chr, uint8_t Char_Size, uint8_t Color_Turn);
void OLED_ShowCHinese(uint8_t x, uint8_t y, uint8_t no, uint8_t Color_Turn);
void OLED_DrawBMP(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *BMP, uint8_t Color_Turn);
void OLED_HorizontalShift(uint8_t direction);
void OLED_Some_HorizontalShift(uint8_t direction, uint8_t start, uint8_t end);
void OLED_VerticalAndHorizontalShift(uint8_t direction);
void OLED_DisplayMode(uint8_t mode);
void OLED_IntensityControl(uint8_t intensity);#endif

,

Ben Qin:

你这里I2C是否能正常的收发信号?引脚上是否有电平?请确认下是I2C的问题还是OLED的问题。

,

ty s:

感谢您的建议,我尝试使用模拟IO与OLED通信,但是还是不行

void IIC_Start()
{delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SDIN_Set();delay_us(1);OLED_SDIN_Clr();
}/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SDIN_Clr();delay_us(1);OLED_SDIN_Set();
}void IIC_Wait_Ack()
{delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SCLK_Clr();
}
/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(uint8_t IIC_Byte)
{uint8_t i;uint8_t m, da;da = IIC_Byte;OLED_SCLK_Clr();delay_us(1);for (i = 0; i < 8; i++){m = da;m = m & 0x80;if (m == 0x80){OLED_SDIN_Set();}elseOLED_SDIN_Clr();da = da << 1;delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SCLK_Clr();delay_us(1);}
}

这是我的配置文件

/*** These arguments were used when this file was generated. They will be automatically applied on subsequent loads* via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.* @cliArgs --device "MSPM0G350X" --package "LQFP-64(PM)" --part "Default" --product "mspm0_sdk@1.20.01.06"* @versions {"tool":"1.18.0+3266"}*//*** Import the modules used in this configuration.*/
const GPIO= scripting.addModule("/ti/driverlib/GPIO", {}, false);
const GPIO1 = GPIO.addInstance();
const GPIO2 = GPIO.addInstance();/*** Write custom configuration values to the imported modules.*/
GPIO1.$name= "LED";
GPIO1.associatedPins.create(2);
GPIO1.associatedPins[0].assignedPin= "26";
GPIO1.associatedPins[0].ioStructure= "SD";
GPIO1.associatedPins[0].$name= "RED";
GPIO1.associatedPins[0].assignedPort = "PORTB";
GPIO1.associatedPins[1].assignedPin= "27";
GPIO1.associatedPins[1].ioStructure= "SD";
GPIO1.associatedPins[1].$name= "GREEN";
GPIO1.associatedPins[1].assignedPort = "PORTB";const Board= scripting.addModule("/ti/driverlib/Board", {}, false);
Board.peripheral.$assign= "DEBUGSS";
Board.peripheral.swclkPin.$assign = "PA20";
Board.peripheral.swdioPin.$assign = "PA19";GPIO2.$name= "GPIO_I2C";
GPIO2.associatedPins.create(2);
GPIO2.associatedPins[0].$name= "SCL";
GPIO2.associatedPins[0].ioStructure= "SD";
GPIO2.associatedPins[0].initialValue= "SET";
GPIO2.associatedPins[0].internalResistor = "PULL_UP";
GPIO2.associatedPins[0].pin.$assign= "PB7";
GPIO2.associatedPins[1].$name= "SDA";
GPIO2.associatedPins[1].internalResistor = "PULL_UP";
GPIO2.associatedPins[1].ioStructure= "SD";
GPIO2.associatedPins[1].initialValue= "SET";
GPIO2.associatedPins[1].pin.$assign= "PB6";const SYSCTL= scripting.addModule("/ti/driverlib/SYSCTL", {}, false);
SYSCTL.forceDefaultClkConfig = true;
SYSCTL.clockTreeEn= true;/*** Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future* version of the tool will not impact the pinmux you originally saw.These lines can be completely deleted in order to* re-solve from scratch.*/
GPIO1.associatedPins[0].pin.$suggestSolution = "PB26";
GPIO1.associatedPins[1].pin.$suggestSolution = "PB27";

我加入了内置的上拉电阻,但是OLED依旧没有反应,但是我的OLED在其他设备上是可以正常使用的,我将系统板上的LED与I2C的两条线相连,灯在闪烁至少显示引脚通信是没有问题的,也非常感谢您的耐心帮助

,

Ben Qin:

那么I2C其实是没问题的,也许有可能是驱动不了你的OLED吧,你可以多尝试几个板子看看

赞(0)
未经允许不得转载:TI中文支持网 » MSPM0G3507: OLED I2C通信
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1