Thông báo

Collapse
No announcement yet.

Cùng nhau trao đổi về STM8

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Chào mọi người, mình đang code giao tiếp I2C trên STM8S003F3 nhưng gặp lỗi. Đầu tiên mình khởi tạo xung clock
    Code:
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
    	
    	CLK_PeripheralClockConfig(TCS34725_I2C_CLK, ENABLE);
    	/* I2C configuration */
      /* sEE_I2C Peripheral Enable */
      I2C_Cmd( ENABLE);
      /* sEE_I2C configuration after enabling it */
      I2C_Init(I2C_MAX_FAST_FREQ, TCS34725_ADDRESS7, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);
    Sau đó đọc I2C thì bị lỗi:

    Code:
    TCS34725_TimeOut = DEFAULT_TIMEOUT;
    	while(I2C_GetFlagStatus( I2C_FLAG_BUSBUSY))
      {
        if((TCS34725_TimeOut--) == 0) return 99;
      }
    	
    	I2C_GenerateSTART(ENABLE);
    	I2C_Send7bitAddress(TCS34725_ADDRESS7, TCS34725_DIRECTION_TX);
    	
    	/* Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
      TCS34725_TimeOut = DEFAULT_TIMEOUT;
      while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT))
      {
        if((TCS34725_TimeOut--) == 0) return 88;
      }
    	
    	/* Test on EV6 and clear it */
      TCS34725_TimeOut = DEFAULT_TIMEOUT;
      while(!I2C_CheckEvent( I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
      {
        if((TCS34725_TimeOut--) == 0) return 77;
      } 
    	
    	/* Test on EV8 and clear it */
      TCS34725_TimeOut = DEFAULT_TIMEOUT;
      while(I2C_GetFlagStatus(I2C_FLAG_TRANSFERFINISHED) == RESET)
      {
        if((TCS34725_TimeOut--) == 0) return 66;
      }
      
      /* Send START condition a second time */  
      I2C_GenerateSTART( ENABLE);
      
      /* Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
      TCS34725_TimeOut = DEFAULT_TIMEOUT;
      while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT))
      {
        if((TCS34725_TimeOut--) == 0) return 55;
      } 
      
      /* Send EEPROM address for read */
      //I2C_Send7bitAddress(TCS34725_ADDRESS7 , I2C_DIRECTION_RX);
    	I2C_Send7bitAddress(addr , I2C_DIRECTION_RX);
    	
    	
    	/* Wait on ADDR flag to be set (ADDR is still not cleared at this level */
    		TCS34725_TimeOut = DEFAULT_TIMEOUT;
        while(I2C_GetFlagStatus( I2C_FLAG_ADDRESSSENTMATCHED) == RESET)
        {
          if((TCS34725_TimeOut--) == 0) return 44;
        } 
           
        /* Disable Acknowledgement */
        I2C_AcknowledgeConfig(I2C_ACK_NONE);   
    
        /* Call User callback for critical section start (should typically disable interrupts) */
        //sEE_EnterCriticalSection_UserCallback();
        
        /* Clear ADDR register by reading SR1 then SR3 register (SR1 has already been read) */
        (void)TCS34725_I2C->SR3;
        
        /* Send STOP Condition */
        I2C_GenerateSTOP( ENABLE);
       
        /* Call User callback for critical section end (should typically re-enable interrupts) */
        //sEE_ExitCriticalSection_UserCallback();
        
        /* Wait for the byte to be received */
        TCS34725_TimeOut = DEFAULT_TIMEOUT;
        while(I2C_GetFlagStatus( I2C_FLAG_RXNOTEMPTY) == RESET)
        {
          if((TCS34725_TimeOut--) == 0) return 33;
        }
        
        /* Read the byte received from the EEPROM */
        tmp = I2C_ReceiveData();
        
        /* Decrement the read bytes counter */
        //(uint16_t)(*NumByteToRead)--;        
        
        /* Wait to make sure that STOP control bit has been cleared */
        TCS34725_TimeOut = DEFAULT_TIMEOUT;
        while(TCS34725_I2C->CR2 & I2C_CR2_STOP)
        {
          if((TCS34725_TimeOut--) == 0) return 22;
        }  
        
        /* Re-Enable Acknowledgement to be ready for another reception */
        I2C_AcknowledgeConfig( I2C_ACK_CURR);
    Sau khi I2C_GenerateSTART(ENABLE); thì nó báo cờ I2C_FLAG_BUSBUSY, nhờ các tiền bối gỡ giúp lỗi này.

    Mạch kết nối 2 ngoại vi i2c trên cùng 1 bus, điạ chỉ lần lượt là 0x29 và 0x39.

    Comment


    • chào anh e! cho mình hỏi:
      làm thế nào để biết dung lượng code mình đang viết cho tm8s vậy? Mình đang dùng STVD và STVP
      Cảm ơn các anh e trước nha!

      Comment


      • Nguyên văn bởi vaa_dtvn Xem bài viết
        Chào mọi người, mình đang code giao tiếp I2C trên STM8S003F3 nhưng gặp lỗi. Đầu tiên mình khởi tạo xung clock
        Code:
        CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
        	
        	CLK_PeripheralClockConfig(TCS34725_I2C_CLK, ENABLE);
        	/* I2C configuration */
          /* sEE_I2C Peripheral Enable */
          I2C_Cmd( ENABLE);
          /* sEE_I2C configuration after enabling it */
          I2C_Init(I2C_MAX_FAST_FREQ, TCS34725_ADDRESS7, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);
        Sau đó đọc I2C thì bị lỗi:

        Code:
        TCS34725_TimeOut = DEFAULT_TIMEOUT;
        	while(I2C_GetFlagStatus( I2C_FLAG_BUSBUSY))
          {
            if((TCS34725_TimeOut--) == 0) return 99;
          }
        	
        	I2C_GenerateSTART(ENABLE);
        	I2C_Send7bitAddress(TCS34725_ADDRESS7, TCS34725_DIRECTION_TX);
        	
        	/* Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
          TCS34725_TimeOut = DEFAULT_TIMEOUT;
          while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT))
          {
            if((TCS34725_TimeOut--) == 0) return 88;
          }
        	
        	/* Test on EV6 and clear it */
          TCS34725_TimeOut = DEFAULT_TIMEOUT;
          while(!I2C_CheckEvent( I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
          {
            if((TCS34725_TimeOut--) == 0) return 77;
          } 
        	
        	/* Test on EV8 and clear it */
          TCS34725_TimeOut = DEFAULT_TIMEOUT;
          while(I2C_GetFlagStatus(I2C_FLAG_TRANSFERFINISHED) == RESET)
          {
            if((TCS34725_TimeOut--) == 0) return 66;
          }
          
          /* Send START condition a second time */  
          I2C_GenerateSTART( ENABLE);
          
          /* Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
          TCS34725_TimeOut = DEFAULT_TIMEOUT;
          while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT))
          {
            if((TCS34725_TimeOut--) == 0) return 55;
          } 
          
          /* Send EEPROM address for read */
          //I2C_Send7bitAddress(TCS34725_ADDRESS7 , I2C_DIRECTION_RX);
        	I2C_Send7bitAddress(addr , I2C_DIRECTION_RX);
        	
        	
        	/* Wait on ADDR flag to be set (ADDR is still not cleared at this level */
        		TCS34725_TimeOut = DEFAULT_TIMEOUT;
            while(I2C_GetFlagStatus( I2C_FLAG_ADDRESSSENTMATCHED) == RESET)
            {
              if((TCS34725_TimeOut--) == 0) return 44;
            } 
               
            /* Disable Acknowledgement */
            I2C_AcknowledgeConfig(I2C_ACK_NONE);   
        
            /* Call User callback for critical section start (should typically disable interrupts) */
            //sEE_EnterCriticalSection_UserCallback();
            
            /* Clear ADDR register by reading SR1 then SR3 register (SR1 has already been read) */
            (void)TCS34725_I2C->SR3;
            
            /* Send STOP Condition */
            I2C_GenerateSTOP( ENABLE);
           
            /* Call User callback for critical section end (should typically re-enable interrupts) */
            //sEE_ExitCriticalSection_UserCallback();
            
            /* Wait for the byte to be received */
            TCS34725_TimeOut = DEFAULT_TIMEOUT;
            while(I2C_GetFlagStatus( I2C_FLAG_RXNOTEMPTY) == RESET)
            {
              if((TCS34725_TimeOut--) == 0) return 33;
            }
            
            /* Read the byte received from the EEPROM */
            tmp = I2C_ReceiveData();
            
            /* Decrement the read bytes counter */
            //(uint16_t)(*NumByteToRead)--;        
            
            /* Wait to make sure that STOP control bit has been cleared */
            TCS34725_TimeOut = DEFAULT_TIMEOUT;
            while(TCS34725_I2C->CR2 & I2C_CR2_STOP)
            {
              if((TCS34725_TimeOut--) == 0) return 22;
            }  
            
            /* Re-Enable Acknowledgement to be ready for another reception */
            I2C_AcknowledgeConfig( I2C_ACK_CURR);
        Sau khi I2C_GenerateSTART(ENABLE); thì nó báo cờ I2C_FLAG_BUSBUSY, nhờ các tiền bối gỡ giúp lỗi này.

        Mạch kết nối 2 ngoại vi i2c trên cùng 1 bus, điạ chỉ lần lượt là 0x29 và 0x39.
        bạn xem phần cứng kết nối đúng chưa? không đúng nó sẽ báo lỗi đó
        Lập Trình theo yêu cầu STM8S,MSP430,89S,Giải mã remote

        Comment


        • Nguyên văn bởi huunho1 Xem bài viết
          bạn xem phần cứng kết nối đúng chưa? không đúng nó sẽ báo lỗi đó
          Mạch đúng và chạy đc bình thường nhé bạn. Mình viết code i2c mềm chạy được ngon lành và vẫn dùng i2c mềm tới giờ vì chưa có tời gian quay lại tìm hiểu nguyên nhân lỗi i2c cứng.

          Comment


          • I2C cứng chạy ngon, tôi đã test trên RTC(DS1307 & BQ32000) thấy good cả.


            Add: 97 Quán Nam - Lê Chân - Hải Phòng.
            Tel: 031 518648 Phone: 0904 283 505

            Comment


            • i2c cứng trên stm8 hình như do phần cứng lỗi hay sao ấy

              Comment


              • Có đầu các cậu lỗi thì có
                Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                Comment


                • bác quế dương cho hỏi bác dùng con này trong trường hợp nào mà bị nhiễu vậy ạ? em dùng thấy nó là chíp 8 bít mạnh nhất và nhiều ngoại vi nhất,rẻ nhất.
                  Modun phát rf của bác có điện áp hoạt động bao nhiêu? tần số sóng mang bao nhiêu bác?
                  Lập Trình theo yêu cầu STM8S,MSP430,89S,Giải mã remote

                  Comment


                  • Nguyên văn bởi huunho1 Xem bài viết
                    bác quế dương cho hỏi bác dùng con này trong trường hợp nào mà bị nhiễu vậy ạ? em dùng thấy nó là chíp 8 bít mạnh nhất và nhiều ngoại vi nhất,rẻ nhất.
                    Modun phát rf của bác có điện áp hoạt động bao nhiêu? tần số sóng mang bao nhiêu bác?
                    Ai nói vs bác là con này là loại 8-bit mạnh nhất, nhiều ngoại vi nhất vậy .


                    Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                    Tel: 031 518648 Phone: 0904 283 505

                    Comment


                    • huu nho nói với mình thế? vậy có con mạnh hơn à bạn?
                      Lập Trình theo yêu cầu STM8S,MSP430,89S,Giải mã remote

                      Comment


                      • huu nho là ai vậy bạn?? Lại còn có cả "huunho1" nữa kìa @@_


                        Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                        Tel: 031 518648 Phone: 0904 283 505

                        Comment


                        • Nguyên văn bởi huunho1 Xem bài viết
                          bác quế dương cho hỏi bác dùng con này trong trường hợp nào mà bị nhiễu vậy ạ? em dùng thấy nó là chíp 8 bít mạnh nhất và nhiều ngoại vi nhất,rẻ nhất.
                          Modun phát rf của bác có điện áp hoạt động bao nhiêu? tần số sóng mang bao nhiêu bác?
                          Áp 12V, tần số 438,5 Mhz
                          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                          Comment


                          • Nguyên văn bởi hoangdai Xem bài viết
                            huu nho là ai vậy bạn?? Lại còn có cả "huunho1" nữa kìa @@_
                            Anh cứ nghĩ là 1 người .
                            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                            Comment


                            • Nguyên văn bởi queduong Xem bài viết
                              Anh cứ nghĩ là 1 người .
                              Mấy chuyện bàn cãi chip này tốt chip kia dỏm, chip này rẻ chip kia đắt thì trên diễn đàn này bàn quá nhiều rồi. Mình thiết nghĩ chỉ bàn mấy chuyện này trên bàn trà chanh , cafe là hợp thôi , bàn trên đây nó ko hợp thời nữa rồi.... v v Bác nào dùng con nào cứ dùng, ko nên chê bai bĩu môi chip khác .

                              Thêm nữa là cũng đừng đổ tội oan cho mấy em MCU, nó chạy đúng lắm đấy, mình làm sai nó thể hiện liền . Cả 1 hãng chứ có phải mấy anh kĩ sư tèng ngồi vẽ nhăng vẽ cuội ra đâu. Bạn cứ làm đi là biết liền . Còn chuyện nhiễu làm ảnh hưởng này khác thì nó là vấn đề muôn đời muôn kiếp, khéo làm thì ấm .


                              Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                              Tel: 031 518648 Phone: 0904 283 505

                              Comment


                              • Bác cho em hỏi là tầm xa của mạch phát bị ảnh hưởng thế nào khi điện áp giảm? nếu mạch phát RF của bác xài 3v thì nó có phát được tầm 30m không ạ?
                                Lập Trình theo yêu cầu STM8S,MSP430,89S,Giải mã remote

                                Comment

                                Về tác giả

                                Collapse

                                sugus Tìm hiểu thêm về sugus

                                Bài viết mới nhất

                                Collapse

                                • mèomướp
                                  Trả lời cho Công thức điện tử
                                  bởi mèomướp
                                  Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
                                  Hôm qua, 21:21
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
                                  Hôm qua, 20:31
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  Ok , thanks bác đã chỉ...
                                  Hôm qua, 15:06
                                • nguyendinhvan
                                  Công thức điện tử
                                  bởi nguyendinhvan
                                  Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

                                  Chập thì thay. Cháy thì tháo
                                  Làm thì láo. Báo thì hay
                                  May thì khoe. Rủi thì bỏ
                                  Thành tích nhỏ. Báo thành to
                                  Làm cho có. Báo chi li
                                  Sai cả li. Báo
                                  ...
                                  Hôm qua, 00:35
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
                                  25-11-2024, 22:31
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
                                  25-11-2024, 22:14
                                • bactho
                                  Trả lời cho Tự làm máy đo Cuộn cảm
                                  bởi bactho
                                  Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
                                  25-11-2024, 21:48
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
                                  25-11-2024, 21:43
                                • bactho
                                  Trả lời cho các bạn giúp mình về file HEX với!!!
                                  bởi bactho
                                  Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
                                  25-11-2024, 21:21
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
                                  25-11-2024, 20:43
                                Đang tải...
                                X