cancel
Showing results for 
Search instead for 
Did you mean: 

How to check open drain pins PB4 and PB5 working properly for I2c communication [STM8S003F3P6]

SSaro.1
Associate II

I am trying to get I2C working for STM8S003F3P6 with ESP8266. I tried I2C sample code available with standard periferal library https://www.st.com/en/embedded-software/stsw-stm8069.html . But for some reason I2c is not working. Now I just noticed the I2C pins PB4 and PB5 marked as open drain without any protection. So I wanted to check if I bricked these pins during my earlier testing sessions. So I written simple code to output on PB4,PB5 pins below, but I am not getting voltage on the PB4 and PB5 pin. I am getting correct output on PD4

static inline void delay_ms(uint16_t ms) {
 
 uint32_t i;
 
 for (i = 0; i < ((F_CPU / 18000UL) * ms); i++)
 
 __asm__("nop");
 
}
 
 
 
#define LED1_GPIO_PORT (GPIOB)
 
#define LED1_GPIO_PINS (GPIO_PIN_4 | GPIO_PIN_5)
 
 
 
#define LED2_GPIO_PORT (GPIOD)
 
#define LED2_GPIO_PINS (GPIO_PIN_4)
 
 
 
void main(void)
 
{
 
 
 
 /* Initialize I/Os in Output Mode */
 
 GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_OD_HIZ_SLOW);
 
 
 
 
 
 GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
 
 //char ans;
 
 /* system_clock / 1 */
 
 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
 
 
 
 /* Initialize LEDs mounted on STM8/128-EVAL board */
 
 //STM_EVAL_LEDInit(LED2);
 
 // STM_EVAL_LEDOff(LED2);
 
 
 
 
 
 
 
 UART1_DeInit();
 
 /* UART1 configuration ------------------------------------------------------*/
 
 /* UART1 configured as follow:
 
 - BaudRate = 115200 baud 
 
 - Word Length = 8 Bits
 
 - One Stop Bit
 
 - No parity
 
 - Receive and transmit enabled
 
 - UART1 Clock disabled
 
 */
 
 UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
 
 UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
 
 
 
 uint8_t counter = 0;
 
 while (1)
 
 {
 
 //ans = getchar();
 
 //printf("%c", ans);
 
 
 
 printf("Test, %d\n", counter++);
 
 
 
 /* toggle pin every 2000ms */
 
 GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);
 
 GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);
 
 delay_ms(2000);
 
 }
 
}

Below is the circuit diagram0693W00000KcxN5QAJ.png 

I am using above circuit, I have pulled up PB4 and PB5 as these are open drain pins. I am measuring output from PB4 and PB5 pins and ground.

Can someone help if above setup is correct and if not how to check if PB4 and PB5 are not broken

This discussion is locked. Please start a new topic to ask your question.
0 REPLIES 0