Hallo,
zusammen ich habe für mein Problem zwar schon andere Beitrage in diesem
Forum angesehen aber immer noch keine Lösung gefunden.
Ich habe für ein Projekt ein selbst designtes STM8 Borad mit einem
STM8S105K6 nun versuche ich per I2C ein EEPROM anzusprechen.
SCL und SDA sind jeweils mit einem 4,7 K Pull-up versehen. Die Pins in
der STM8_128_EVAL_H habe ich entsprechend angepasst. Steuere ich nun die
Pins direkt an sehe ich am Oszi das toggeln.
Code:
1 |
|
2 | /* Includes ------------------------------------------------------------------*/
|
3 | #include "stm8s.h"
|
4 | #include "stm8s_eval.h"
|
5 |
|
6 | #define I2C_DIRECTION_RX1
|
7 |
|
8 | void main(){
|
9 |
|
10 | GPIO_DeInit(GPIOB);
|
11 | GPIO_Init(GPIOB, GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_SLOW); /LED green
|
12 | GPIO_Init(GPIOB, GPIO_PIN_2,GPIO_MODE_OUT_PP_LOW_SLOW); /LED red
|
13 | GPIO_WriteHigh(GPIOB, GPIO_PIN_0);
|
14 | GPIO_WriteHigh(GPIOB, GPIO_PIN_2);
|
15 |
|
16 | GPIO_Init(sEE_I2C_SCL_GPIO_PORT, sEE_I2C_SCL_PIN, GPIO_MODE_OUT_OD_LOW_SLOW);
|
17 | GPIO_Init(sEE_I2C_SDA_GPIO_PORT, sEE_I2C_SDA_PIN, GPIO_MODE_OUT_OD_LOW_SLOW);
|
18 |
|
19 | TIM3_DeInit();
|
20 | TIM3_TimeBaseInit(TIM3_PRESCALER_2,20);
|
21 | TIM3_Cmd(ENABLE);
|
22 |
|
23 | while(1){
|
24 | while(TIM3_GetCounter() < 2) {
|
25 | GPIO_WriteLow(sEE_I2C_SCL_GPIO_PORT, sEE_I2C_SCL_PIN);
|
26 | GPIO_WriteHigh(sEE_I2C_SDA_GPIO_PORT, sEE_I2C_SDA_PIN);
|
27 | GPIO_WriteLow(GPIOB, GPIO_PIN_0);
|
28 | }
|
29 | while (TIM3_GetCounter() >= 5) {
|
30 | GPIO_WriteHigh(sEE_I2C_SCL_GPIO_PORT, sEE_I2C_SCL_PIN);
|
31 | GPIO_WriteLow(sEE_I2C_SDA_GPIO_PORT, sEE_I2C_SDA_PIN);
|
32 | GPIO_WriteHigh(GPIOB, GPIO_PIN_0);
|
33 | }
|
34 | }
|
35 | }
|
Versuche ich aber den I2C zu konfigurieren kann ich nichts am Ausgnag
messen.
Code:
1 | /* Includes ------------------------------------------------------------------*/
|
2 | #include "stm8s.h"
|
3 | #include "stm8s_eval.h"
|
4 |
|
5 | #define I2C_DIRECTION_TX
|
6 |
|
7 | void main(){
|
8 |
|
9 | // Hardware I2C konfig.
|
10 | I2C_DeInit();
|
11 | I2C_Init(100000, 0xA0, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);
|
12 | I2C_Cmd (ENABLE);
|
13 |
|
14 |
|
15 | while(1){
|
16 | I2C_GenerateSTART(ENABLE);
|
17 |
|
18 | I2C_Send7bitAddress(0xa0, I2C_DIRECTION_TX);
|
19 |
|
20 | I2C_SendData(0x00); // set register pointer 00h
|
21 | I2C_SendData(0x00); // write 0x00 to 00h (oscillator enabled)
|
22 | I2C_GenerateSTOP(ENABLE); // stop
|
23 | }
|
24 | }
|
Was könnte mein Fehler sein?
Gruß
X-Team