娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

本文介紹了在STM32下的IIC的基本使用方法,通過(guò)對(duì)板載具備IIC接口EEPROM的讀寫(xiě),完成對(duì)IIC驅(qū)動(dòng)程序的測(cè)試。


硬件平臺(tái):STM32F107VCT6開(kāi)發(fā)板


軟件平臺(tái):STM32Cube MX + MDK5.22


1. 進(jìn)行STM32Cube MX的配置



配置PB6和PB7為輸出模式,同時(shí)配置了USART1進(jìn)行串口調(diào)試使用。然后生成工程。


2. 打開(kāi)工程,可以看到GPIO的初始化狀態(tài)



3. 模擬IIC驅(qū)動(dòng)程序源文件代碼


/**


  * @file  iic_dup.c


  * @brief IIC上層程序


  * @par   date        version    author    remarks


  *        2016-03-21  v1.0       zbt       初次創(chuàng)建


  *


  */

 


/** 頭文件包含區(qū) ------------------------------------------------ */


#include "iic_dup.h"


 

/** 私有宏(類型定義) -------------------------------------------- */ 


#define IIC1_SCL(pin_status)        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, pin_status);


#define IIC1_SDA(pin_status)        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, pin_status);


#define IIC1_SCL_IS_HIGH()          (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) != GPIO_PIN_RESET)


#define IIC1_SDA_IS_HIGH()          (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) != GPIO_PIN_RESET)

 

/** 私有變量 --------------------------------------------------- */

 

 

/** 外部變量 --------------------------------------------------- */

 

/** 私有函數(shù)原型 ----------------------------------------------- */


static void iic_delay(void);

 

/** 公有函數(shù) --------------------------------------------------- */


/**


  * @brief  IIC啟動(dòng)


  * @param  None


  * @retval None


  * @note   當(dāng)SCL處于高電平狀態(tài)時(shí),SDA出現(xiàn)一個(gè)下降沿


            即產(chǎn)生IIC啟動(dòng)信號(hào)


  */


void iic_start(void)


{

   

IIC1_SCL(GPIO_PIN_SET);


    /** SDA產(chǎn)生一個(gè)下降沿 */


    IIC1_SDA(GPIO_PIN_SET);


    iic_delay(); 

    

    IIC1_SDA(GPIO_PIN_RESET);


    iic_delay(); 


    IIC1_SCL(GPIO_PIN_RESET);   /**< 拉低準(zhǔn)備發(fā)送數(shù)據(jù) */


    iic_delay();   


}

 


/**


  * @brief  IIC停止


  * @param  None


  * @retval None


  * @note   當(dāng)SCL處于高電平狀態(tài)時(shí),SDA出現(xiàn)一個(gè)上升沿


            即產(chǎn)生IIC停止信號(hào)


  */


void iic_stop(void)


{


    IIC1_SCL(GPIO_PIN_RESET);


    iic_delay();


    /** SDA產(chǎn)生一個(gè)上升沿 */


    IIC1_SDA(GPIO_PIN_RESET);


    iic_delay();

    

    IIC1_SCL(GPIO_PIN_SET);


    iic_delay();


    IIC1_SDA(GPIO_PIN_SET);


    iic_delay();


}

 

/**


  * @brief  IIC發(fā)送1byte數(shù)據(jù)


  * @param  None


  * @retval None


  * @note   


  */


void iic_sendbyte(uint8_t byte)


{


    uint8_t i;

    

    /** 發(fā)送一個(gè)字節(jié)的高7位 */

  

  for (i = 0; i < 8; i++)


    {


        if (byte & 0x80)


        {


            IIC1_SDA(GPIO_PIN_SET);


        }


        else


        {


            IIC1_SDA(GPIO_PIN_RESET);


        }


        

        iic_delay();


        IIC1_SCL(GPIO_PIN_SET);


        iic_delay();


        IIC1_SCL(GPIO_PIN_RESET)


        if (i == 7)


        {


            IIC1_SDA(GPIO_PIN_SET);


        }

        

        byte <<= 1;


        iic_delay();


    }      


}

 

/**


  * @brief  IIC讀取1byte數(shù)據(jù)


  * @param  None


  * @retval None


  * @note             


  */


uint8_t iic_readbyte(void)


{


    uint8_t i;


    uint8_t recv_value = 0;

    

    IIC1_SDA(GPIO_PIN_SET);


    iic_delay();

    


    for (i = 0; i < 8; i++)


    {


        IIC1_SCL(GPIO_PIN_SET);


        iic_delay();


        recv_value <<= 1;


        if (IIC1_SDA_IS_HIGH())


        {


            recv_value |= 0x01;


        }


        else


        {


            recv_value &= ~0x01;


        }

        

        iic_delay();


        IIC1_SCL(GPIO_PIN_RESET);


    }

    


    return recv_value;


}

 

/**


  * @brief  IIC等待應(yīng)答信號(hào)


  * @param  None


  * @retval ack_status: 應(yīng)答狀態(tài),0表示應(yīng)答,1表示設(shè)備無(wú)響應(yīng)


  */


uint8_t iic_wait_ack(void)


{


    uint8_t ack_status = 0;

    


    /** 在等待應(yīng)答信號(hào)之前,要釋放總線,即將SDA置位 */


    IIC1_SDA(GPIO_PIN_SET);


    iic_delay();


    IIC1_SCL(GPIO_PIN_SET);


    iic_delay();

    

    if (IIC1_SDA_IS_HIGH())


    {    


        ack_status = 1;


        iic_stop();


    }


    else


    {


        ack_status = 0;


    }

    

    IIC1_SCL(GPIO_PIN_RESET);


    iic_delay();

    

    return ack_status;


}

 

/**


  * @brief  主機(jī)(主控制器)產(chǎn)生應(yīng)答信號(hào)


  * @param  None


  * @retval None


  */


void iic_ack(void)


{


    IIC1_SDA(GPIO_PIN_RESET);


    iic_delay();

    

    IIC1_SCL(GPIO_PIN_SET);


    iic_delay();


    IIC1_SCL(GPIO_PIN_RESET);


    iic_delay();

    

    IIC1_SDA(GPIO_PIN_SET);


}

 

/**


  * @brief  主機(jī)(主控制器)產(chǎn)生不應(yīng)答信號(hào)


  * @param  None


  * @retval None


  */


void iic_nack(void)


{


    IIC1_SDA(GPIO_PIN_SET);


    iic_delay();

    

    IIC1_SCL(GPIO_PIN_SET);


    iic_delay();


    IIC1_SCL(GPIO_PIN_RESET);


    iic_delay();


}

 

/**


  * @brief  檢測(cè)IIC總線上的設(shè)備狀態(tài)


  * @param  device_addr: 從機(jī)設(shè)備地址 


  * @retval ack_status: 0 (正常)or 1(異常)


  * @note   主機(jī)發(fā)送設(shè)備地址等待從機(jī)應(yīng)答,若有從機(jī)正確的應(yīng)答信號(hào)


            則表明IIC總線上掛接了設(shè)備,否則表示IIC總線上未檢測(cè)到


            設(shè)備


  */


uint8_t iic_check_device_status(uint8_t device_addr)


{


    uint8_t ack_status;

    

    if (IIC1_SCL_IS_HIGH() && IIC1_SDA_IS_HIGH())


    {


        iic_start();

        

        iic_sendbyte(device_addr | IIC_WRITE);


        ack_status = iic_wait_ack();

 

        iic_stop();

        

        return ack_status;    


}

    

    return 1;


}

 

/** 私有函數(shù) --------------------------------------------------- */


/**


  * @brief  用于模擬IIC時(shí)的簡(jiǎn)單延時(shí)


  * @param  None


  * @retval None


  */


static void iic_delay(void)


{


    uint8_t i = 0;


    uint8_t delay = 5;

    

    while (delay--)


    {


        i = 10;


        while (i--);


    }


}


4. AT24C02部分驅(qū)動(dòng)代碼


/**


  * @file  at24c02.c


  * @brief at24c02驅(qū)動(dòng)程序


  * @par   date        version    author    remarks


  *        2016-03-21  v1.0       zbt       初次創(chuàng)建


  *


  */

 

/** 頭文件包含區(qū) ------------------------------------------------ */


#include "at24c02.h"


#include "iic_dup.h"

 

/** 私有宏(類型定義) -------------------------------------------- */ 


#define AT24C02_DEVICE_ADDR         0xA0


#define AT24C02_PAGE_SIZE           8


#define AT24C02_MEM_SIZE            256


#define AT24C02_ADDR_BYTE           1

 

/** 私有變量 --------------------------------------------------- */


uint8_t test_buffer[AT24C02_MEM_SIZE];

 

/** 外部變量 --------------------------------------------------- */

 

/** 私有函數(shù)原型 ----------------------------------------------- */


//static void AT24C02_ack(void);


static void AT24C02_error_handle(void);


static void AT24C02_read_test(void);


static void AT24C02_write_test(void);


static void AT24C02_erase_test(void);

 

/** 公有函數(shù) --------------------------------------------------- */


/**


  * @brief  AT24C02與主控制器的IIC通訊測(cè)試代碼


  * @param  None


  * @retval None


  */


void AT24C02_iic_test(void)


{


    iic_stop();     /**< 必須先復(fù)位IIC總線上的設(shè)備到待機(jī)模式 */


    HAL_Delay(10);

    

    /** 檢測(cè)總線上是否掛接了IIC設(shè)備(此處為AT24C02) */


    if (iic_check_device_status(AT24C02_DEVICE_ADDR) == 0)


    {


        printf("iic device exists\n");


    }


    else


    {


        printf("no iic device exists\n");


    }

    

    AT24C02_write_test();


    HAL_Delay(5);


    AT24C02_read_test();


    HAL_Delay(5);


    AT24C02_erase_test();


}

 

/**


  * @brief  從AT24C02中讀取數(shù)據(jù)


  * @param  read_data: 讀取到的數(shù)據(jù)


  * @param  start_addr: 讀取數(shù)據(jù)的起始地址


  * @param  data_length: 數(shù)據(jù)的長(zhǎng)度


  * @retval None


  */


void AT24C02_read_data(uint8_t *read_data, uint16_t start_addr, uint16_t data_length)


{


    uint16_t i;

    

    iic_start();


    iic_sendbyte(AT24C02_DEVICE_ADDR | IIC_WRITE);


//    AT24C02_ack();


    if (iic_wait_ack() != 0)


    {


        AT24C02_error_handle();


        printf("first read error\r\n");


    }

    

    if (AT24C02_ADDR_BYTE == 1)

 

   {


        iic_sendbyte((uint8_t)start_addr & 0xff);


//        AT24C02_ack();


        if (iic_wait_ack() != 0)


        {


            AT24C02_error_handle();


            printf("addr byte error\r\n");


        }

    }

    

    iic_start();


    iic_sendbyte(AT24C02_DEVICE_ADDR | IIC_READ);


//    AT24C02_ack();


    if (iic_wait_ack() != 0)

   

{

 

       AT24C02_error_handle();


        printf("read data error\r\n");


    }


     for (i = 0; i < data_length; i++)

    

{


        read_data[i] = iic_readbyte();

        

        if (i != data_length - 1)


        {


            iic_ack();      /**< 讀完非最后一個(gè)字節(jié)后, 產(chǎn)生應(yīng)答信號(hào) */


        }


        else


        {


            iic_nack();     /**< 最后一個(gè)字節(jié)讀完后 產(chǎn)生非應(yīng)答信號(hào) */


        }


//        printf("read data is %d\n", read_data[i]);  /**< 調(diào)試代碼 */


    }

iic_stop();


}

 

/**


  * @brief  通過(guò)IIC向AT24C02寫(xiě)數(shù)據(jù)


  * @param  write_data:  要寫(xiě)入AT24C02的數(shù)據(jù)指針


  * @param  start_addr:  要寫(xiě)入AT24C02的起始地址


  * @param  data_length: 要寫(xiě)入AT24C02的數(shù)據(jù)長(zhǎng)度


 * @retval None


 */


void AT24C02_write_data(uint8_t *write_data, uint16_t start_addr, uint16_t data_length)


{


    uint16_t i, j;


    uint16_t start_addr_dup;

    

    start_addr_dup = start_addr;


    for (i = 0; i < data_length; i++)


    {

        

        if ((i == 0) || (start_addr_dup & (AT24C02_PAGE_SIZE - 1)) == 0)


        {


            iic_stop();

            

            for (j = 0; j < 2000; j++)

       

     {


                iic_start();

         

       iic_sendbyte(AT24C02_DEVICE_ADDR | IIC_WRITE);

                

                if (iic_wait_ack() == 0)

       

         {

   

                 break;


                }


            }


            if (j >= 2000)


            {


                printf("j = 1000\r\n");


                AT24C02_error_handle();


            }

            

            if (AT24C02_ADDR_BYTE == 1)


            {


                iic_sendbyte((uint8_t)start_addr_dup & 0xff);


//                AT24C02_ack();


                if (iic_wait_ack() != 0)


                {


                    AT24C02_error_handle();


                    printf("addr_byte wrong\r\n");


                }


            }


        }

        

        iic_sendbyte(write_data[i]);


//        AT24C02_ack();


        if (iic_wait_ack() != 0)


        {


            AT24C02_error_handle();


            printf("write failed\r\n");


        }

        

//        printf("write_data is %d \n", write_data[i]);    /**< 調(diào)試代碼 */ 


        start_addr_dup++;


    }

    

    iic_stop();


}

 

/** 私有函數(shù) --------------------------------------------------- */


/** 以下為測(cè)試用程序 ------------------------------------------- */


/**


  * @brief  AT24C02讀取數(shù)據(jù)測(cè)試


  * @param  None


  * @retval None


  */


static void AT24C02_read_test(void)


{


    uint16_t i;

    

    AT24C02_read_data(test_buffer, 0, (AT24C02_MEM_SIZE % 10));

    

    printf("read data is:\n");


    for (i = 0; i < (AT24C02_MEM_SIZE % 10); i++)


    {


        printf("%d ", test_buffer[i]);


    }

    

    printf("\r\nread test ok\r\n");


}

 

/**


  * @brief  AT24C02寫(xiě)數(shù)據(jù)測(cè)試


  * @param  None


  * @retval None


  */

static void AT24C02_write_test(void)

{

    uint16_t i;

    

    for (i = 0; i < (AT24C02_MEM_SIZE % 10); i++)

    {

        test_buffer[i] = i;

    }

    

    AT24C02_write_data(test_buffer, 0, (AT24C02_MEM_SIZE % 10));

    

    printf("write data is:\n");


    for (i = 0; i < (AT24C02_MEM_SIZE % 10); i++)


    {


        printf("%d ", test_buffer[i]);


    }

    

    printf("\r\nwrite test ok\r\n");


}

 

/**

  * @brief  AT24C02擦除數(shù)據(jù)測(cè)試


  * @param  None


  * @retval None


  */


static void AT24C02_erase_test(void)


{


    uint16_t i;

    

    for (i = 0; i < (AT24C02_MEM_SIZE % 10); i++)


    {


        test_buffer[i] = 0xff;


    }

    

    AT24C02_write_data(test_buffer, 0, (AT24C02_MEM_SIZE % 10));

    

    printf("erase value is: \n");


    for (i = 0; i < (AT24C02_MEM_SIZE % 10); i++)


    {


        printf("%d ", test_buffer[i]);


    }

    

    printf("\r\nerase test ok\r\n");


}


/** 以上為測(cè)試用程序 ------------------------------------------- */

 

/**


  * @brief  AT24C02應(yīng)答錯(cuò)誤處理程序


  * @param  None


  * @retval None


  */


static void AT24C02_error_handle(void)


{


    iic_stop();


//    printf("At24C02 read failed\r\n");   /**< 調(diào)試用 */


}

 

//static void AT24C02_ack(void)


//{


//    if (iic_wait_ack() != 0)


//    {


//        AT24C02_error_handle();


//    }


//}


5. 在主函數(shù)中添加 AT24C02_iic_test(); 進(jìn)行讀寫(xiě)測(cè)試成功。

關(guān)鍵字:STM32Cube  MX  IIC  配置與使用 引用地址:STM32Cube MX 下IIC的配置與使用

上一篇:STM32 硬件I2C中斷實(shí)現(xiàn)
下一篇:LPC1114時(shí)鐘學(xué)習(xí)

推薦閱讀

項(xiàng)目中遇到,用I2C進(jìn)行讀寫(xiě)IC數(shù)據(jù),有時(shí)候I2C線沒(méi)接好,特別是GND沒(méi)共的時(shí)候,I2C會(huì)卡死在:類似:I2C_WaitOnTXEFlagUntilTimeout這種函數(shù)中,原因:if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))HAL_GetTick的值永遠(yuǎn)不遞增了,因?yàn)镾ysTick_Handler中斷不來(lái)了。系統(tǒng)時(shí)鐘中斷不行了。考慮過(guò)幾種解決辦法1.調(diào)整系統(tǒng)時(shí)間的優(yōu)先級(jí),已經(jīng)...
最近幾個(gè)月,谷歌母公司Alphabet的登月計(jì)劃X團(tuán)隊(duì)一直在辦公室里使用機(jī)器人對(duì)垃圾進(jìn)行分類。這些帶輪子的機(jī)器人可以移動(dòng)到加州山景城辦公室的垃圾站,利用視覺(jué)和機(jī)械手臂的組合對(duì)垃圾進(jìn)行分類。 日前,神秘的X團(tuán)隊(duì)推出了一個(gè)頗有野心的項(xiàng)目,名為Everyday Robot,其目標(biāo)是開(kāi)發(fā)“通用學(xué)習(xí)機(jī)器人”。 X 全稱為The Moonshot Factory,以前被稱為Google...
HT1621是128 點(diǎn)內(nèi)存映象和多功能的LCD 驅(qū)動(dòng)器 , HT1621 的軟件配置特性使它適用于多種 LCD 應(yīng)用場(chǎng)合,包括 LCD 模塊和顯示子系統(tǒng)。用于連接主控制器和HT1621 的管腳只有 4 或 5 條, HT1621 還有一個(gè)節(jié)電命令用于降低系統(tǒng)功耗。在虎風(fēng)所做的這個(gè)系統(tǒng)中 ht1621 用于驅(qū)動(dòng)一個(gè)靜態(tài)的 LCD 液晶顯示器。液晶顯示的方式分為靜態(tài)顯示和動(dòng)態(tài)...
據(jù)業(yè)內(nèi)消息人士稱,臺(tái)積電已將CoWoS封裝業(yè)務(wù)的部分流程外包給了日月光、矽品、安靠等OSAT,尤其是在小批量定制產(chǎn)品方面。CoWoS(Chip On Wafer On Substrate)是一種2.5D封裝技術(shù),先將芯片通過(guò)Chip on Wafer(CoW)的封裝制程連接至硅晶圓,再把CoW芯片與基板連接(On Substrate,簡(jiǎn)稱oS)。據(jù)《電子時(shí)報(bào)》援引上述人士稱,對(duì)于一些需要小批量生產(chǎn)...

史海拾趣

問(wèn)答坊 | AI 解惑

電工的職業(yè)病, 說(shuō)說(shuō)看, 你有嗎?

看見(jiàn)紅綠燈你是不是想到動(dòng)態(tài)顯示和靜態(tài)顯示? 看見(jiàn)霓虹燈你是不是想到流水燈控制程序? 看見(jiàn)高檔車的剎車燈你是不是想到那是LED做的? 看見(jiàn)路邊的電子警察你是不是想到多普勒效應(yīng)? 看見(jiàn)路邊的變壓器你是不是想到了初極和次極? 看見(jiàn)家里的白 ...…

查看全部問(wèn)答∨

新穎電子設(shè)計(jì)及制作

本帖最后由 paulhyde 于 2014-9-15 09:27 編輯 這是綜合起來(lái)的資料,還蠻有用的呢,看看吧  …

查看全部問(wèn)答∨

汽車LED燈

汽車LED燈 14.5V 400LM 用18個(gè)0.5W燈做 電壓:14.5VDC 光通量:400LM LED:0.5W白光 LED:18PCS 誰(shuí)有方案類的IC提供的。…

查看全部問(wèn)答∨

vivi映像加載問(wèn)題

感謝論壇好友對(duì)我第一個(gè)問(wèn)題回答。 問(wèn)題: VIVI啟動(dòng)后,我根據(jù)其手冊(cè)上load的用法,做了如下事情: load ram 0x30008000 0x6000 x 發(fā)送一個(gè)system.bin(由arm fromELF生成的 plain binnary文件) 我的思路是不用從FLASH中加載到RAM中,我自己把 ...…

查看全部問(wèn)答∨

eboot系列問(wèn)題--------------請(qǐng)教EBOOT.BIB和CONFIG.BIB中的內(nèi)容!

config.bib: ; 8000.0000 -+ ;            | Bootloader Stack (64KB) ; 8001.0000 -+ ;            | Bootloader RAM (64KB) ; 8002.0000 -+ ;  &nb ...…

查看全部問(wèn)答∨

嵌入系統(tǒng)

    要求:         在LINUX系統(tǒng)中通過(guò)的嵌入式手機(jī)二級(jí)菜單.               只通過(guò)鍵盤上的方向鍵、ENTER、ESC控制。…

查看全部問(wèn)答∨

關(guān)于內(nèi)核對(duì)象?winobj

小生想知道內(nèi)核對(duì)象都有什么樣的區(qū)別,如使用Winobj看到的: Arcname, basenamedobjects, callback, device  這些里面的內(nèi)核對(duì)象都有什么區(qū)別啊??要全面的,比較詳細(xì)的!語(yǔ)言不限~~…

查看全部問(wèn)答∨

求高手指點(diǎn)為什么只能計(jì)數(shù)低八位

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity clock_10Hz isport(reset:in std_logic;clk_in:in std_logic;clk_out: out std_logic_vector(21 downto 0));end clock_10Hz ; architecture behavioral of cl ...…

查看全部問(wèn)答∨

華禹工控及移動(dòng)微平臺(tái)介紹

華禹工控及移動(dòng)微平臺(tái)介紹  華禹工控原是深圳市華禹高科技有限公司的一個(gè)行業(yè)應(yīng)用事業(yè)部,從08年底獨(dú)立運(yùn)作,11年4月正式獨(dú)立于華禹高,注冊(cè)公司為深圳市華禹工控科技有限公司,獨(dú)立地址運(yùn)作辦公。 華禹工控的獨(dú)立轉(zhuǎn)型做行業(yè)應(yīng)用,也算是深 ...…

查看全部問(wèn)答∨

ATCAN90128單片機(jī)問(wèn)題求助!!

我采用的是ICCAVR7.22進(jìn)行編譯,AVRStudio4.18進(jìn)行調(diào)試,仿真器為JTAG_MKII 編寫(xiě)的程序不是很復(fù)雜,包括串口中斷、AD中斷和定時(shí)器中斷在硬件仿真時(shí)出現(xiàn)問(wèn)題 計(jì)算乘法時(shí),計(jì)算數(shù)據(jù)錯(cuò)誤,如下: double A double B unsigned int C C=(unsinged ...…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 清镇市| 西乡县| 隆德县| 唐河县| 庆云县| 子洲县| 甘洛县| 泸溪县| 类乌齐县| 阜康市| 佛学| 洛南县| 内黄县| 垦利县| 临高县| 辰溪县| 麟游县| 揭西县| 武穴市| 扶风县| 苍南县| 陆丰市| 卓资县| 通辽市| 辉南县| 亳州市| 平邑县| 通城县| 浪卡子县| 秦安县| 定安县| 鲁甸县| 临洮县| 依安县| 资阳市| 陆河县| 根河市| 温泉县| 西乡县| 舒兰市| 甘孜县|