{"id":243,"date":"2022-03-01T14:59:43","date_gmt":"2022-03-01T06:59:43","guid":{"rendered":"http:\/\/150.158.163.220\/?p=243"},"modified":"2022-12-19T21:00:10","modified_gmt":"2022-12-19T13:00:10","slug":"mm32%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/zhewana.cn\/?p=243","title":{"rendered":"MM32\u5b66\u4e60\u7b14\u8bb0"},"content":{"rendered":"<p>\u62ff\u5230\u82af\u7247\u80af\u5b9a\u662f\u5148\u642d\u5efa\u5f00\u53d1\u73af\u5883\uff0c\u642d\u5efa\u5f00\u53d1\u73af\u5883\u76f8\u5173\u5185\u5bb9\u5728<a href=\"https:\/\/zhewana.cn\/index.php\/archives\/320\/\">\u8fd9\u7bc7\u6587\u7ae0<\/a>\u91cc\u9762\u3002<\/p>\n<p>\u5f00\u59cb\u5b66\u4e60\u5355\u7247\u673a\u7684\u7b2c\u4e00\u4ef6\u4e8b----\u5148\u770b\u4e00\u773c\u5b83\u7684\u7cfb\u7edf\u6846\u56fe\u3002<\/p>\n<p>\u7b49\u7b49\uff0c\u600e\u4e48\u6709\u70b9\u773c\u719f\uff08bushi<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/1960960231.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/1960960231.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20220226144321213.png\" \/><\/div><\/p>\n<h2>\u65f6\u949f\u6811<\/h2>\n<p><del>\u4ece\u7cfb\u7edf\u6846\u56fe\u4e0a\u53ef\u4ee5\u770b\u51fa\u8fd9\u54e5\u4eec\u7684\u65f6\u949f\u603b\u7ebf\u548c\u53e6\u4e00\u4e2a\u67d032\u6709\u70b9\u50cf\u554a<\/del><\/p>\n<p>\u54b3\u54b3\uff0c\u6b63\u7ecf\u70b9\u3002<\/p>\n<p>AHB\u603b\u7ebf\u8fde\u63a5\u7740\u603b\u7ebf\u77e9\u9635\u548c\u5916\u8bbe\u603b\u7ebfAPB1\u548cAPB2\uff0c\u7ecf\u6d4b\u8bd5\uff0cAPB1\u603b\u7ebf\u7684\u9ed8\u8ba4\u914d\u7f6e\u65f6\u949f\u9891\u7387\u4e3a60M\uff0c\u800cAPB2\u603b\u7ebf\u7684\u9ed8\u8ba4\u9891\u7387\u662f\u548cAHB\u603b\u7ebf\uff08\u5373\u7cfb\u7edf\u65f6\u949f\uff09\u76f8\u540c\u7684120M\u3002<\/p>\n<p>\u65f6\u949f\u603b\u7ebf\u6846\u67b6\u56fe\u5982\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/1275619322.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/1275619322.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20220226170245579.png\" \/><\/div><\/p>\n<h3>\u76f8\u5173\u51fd\u6570<\/h3>\n<pre><code class=\"language-C\">\/\/\u4f7f\u80fd\u5404\u4e2a\u603b\u7ebf\u65f6\u949f\nvoid RCC_AHBPeriphClockCmd(u32 ahb_periph, FunctionalState state);\nvoid RCC_AHB2PeriphClockCmd(u32 ahb_periph, FunctionalState state);\nvoid RCC_AHB3PeriphClockCmd(u32 ahb_periph, FunctionalState state);\nvoid RCC_AHBPeriphResetCmd(u32 ahb_periph, FunctionalState state);\nvoid RCC_AHB2PeriphResetCmd(u32 ahb_periph, FunctionalState state);\nvoid RCC_AHB3PeriphResetCmd(u32 ahb_periph, FunctionalState state);\nvoid RCC_APB2PeriphClockCmd(u32 apb2_periph, FunctionalState state);\nvoid RCC_APB1PeriphClockCmd(u32 apb1_periph, FunctionalState state);<\/code><\/pre>\n<h2>GPIO<\/h2>\n<p>\u8fd9\u5c31\u4e0d\u7528\u5e9f\u8bdd\u4e86\uff0c\u76f4\u63a5\u4e0a\u521d\u59cb\u5316GPIO\u4e3a\u8f93\u51fa\u7684\u4ee3\u7801\uff1a<\/p>\n<pre><code class=\"language-C\">void MM_GPIO_Init()\n{\n    \/\/\u5b9a\u4e49GPIO\u53e5\u67c4\n    GPIO_InitTypeDef GPIO_InitStruct;\n\n    \/\/\u5f00\u542fGPIO\u5916\u8bbe\u65f6\u949f\n    \/\/GPIO\u6302\u5728AHB\u603b\u7ebf\u4e0a\n    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE);\n\n    \/\/\u521d\u59cb\u5316GPIO\u7ed3\u6784\u4f53\uff0c\u9632\u6b62\u4f7f\u7528\u65f6\u51fa\u73b0\u672a\u88ab\u521d\u59cb\u5316\u7684\u6210\u5458\n    GPIO_StructInit(&amp;GPIO_InitStruct);\n\n    \/\/\u8bbe\u7f6eGPIO\u590d\u7528\u529f\u80fd\n    GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_15);\n    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;\n    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;\n    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;\n    \/\/ GPIO\u521d\u59cb\u5316\n    GPIO_Init(GPIOB, &amp;GPIO_InitStruct);\n}<\/code><\/pre>\n<h3>\u76f8\u5173\u51fd\u6570<\/h3>\n<p>\u521d\u59cb\u5316\u4e4b\u540e\u5373\u53ef\u4f7f\u7528\u4ee5\u4e0b\u51fd\u6570\u6765\u63a7\u5236\u8f93\u51fa\u4ee5\u53ca\u8bfb\u53d6\u7aef\u53e3\u503c\uff1a<\/p>\n<pre><code class=\"language-C\">\/\/GPIO\u5f15\u811a\u7f6e\u4f4d\nvoid GPIO_SetBits(GPIO_TypeDef* gpio, u16 pin);\n\/\/GPIO\u5f15\u811a\u590d\u4f4d\nvoid GPIO_ResetBits(GPIO_TypeDef* gpio, u16 pin);\n\/\/GPIO\u5199\u5f15\u811a\uff08\u4e0a\u9762\u4e24\u4e2a\u590d\u5408\u7248\u672c\nvoid GPIO_WriteBit(GPIO_TypeDef* gpio, u16 pin, BitAction value);\n\/\/GPIO\u7aef\u53e3\u5199\u5165\uff08\u63a7\u5236\u591a\u4e2a\u5f15\u811a\nvoid GPIO_Write(GPIO_TypeDef* gpio, u16 value);<\/code><\/pre>\n<h2>\u5b9a\u65f6\u5668<\/h2>\n<h3>\u5b9a\u65f6\u5668\u65f6\u949f<\/h3>\n<p>\u8c03\u8bd5\u4e86\u4ee5\u4e0b\uff0c\u770b\u4e86\u770b\u5b9a\u65f6\u5668\u91cc\u9762\u7684\u5bc4\u5b58\u5668\u7684\u503c\uff0c\u5f97\u77e5APB1\u603b\u7ebf\u9884\u5206\u9891\u4e3a4\uff0cAPB2\u603b\u7ebf\u9884\u5206\u9891\u4e3a1\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/2814670191.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/2814670191.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20220226211759119.png\" \/><\/div><\/p>\n<p>\u7ed3\u5408\u65f6\u949f\u6846\u56fe\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/950134008.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/zhewana.cn\/wp-content\/uploads\/2022\/03\/950134008.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20220226212004190.png\" \/><\/div><\/p>\n<p>APB1\u603b\u7ebf\u9891\u7387\u5206\u5230\u5b9a\u65f6\u5668\u65f6\u949f\u65f6\u7531\u4e8e\u9884\u5206\u9891\u4e0d\u4e3a1\uff0c\u6545\u505a\u4e00\u6b212\u500d\u9891\uff0c\u4e5f\u5373\u5b9a\u65f6\u5668\u65f6\u949f\u4e3aAHB\u65f6\u949f2\u5206\u9891\u3002\u540c\u7406\uff0cAPB2\u603b\u7ebf\u9891\u7387\u4e0eAHB\u76f8\u540c\u3002<\/p>\n<h3>\u57fa\u7840\u5b9a\u65f6\u4e2d\u65ad<\/h3>\n<pre><code class=\"language-C\">void MM_TIM_Init(void)\n{\n    \/\/\u5b9a\u4e49\u5b9a\u65f6\u5668\u53e5\u67c4\n    TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;\n\n    \/\/\u4f7f\u80fd\u5916\u8bbe\u65f6\u949f\n    \/\/ TIM2\u6302\u8f7d\u5728APB1\u603b\u7ebf\u4e0a\n    RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM2, ENABLE);\n\n    \/\/\u521d\u59cb\u5316\u4ee5\u53ca\u8d4b\u503c\u5b9a\u65f6\u5668\u7ed3\u53e5\u67c4\n    TIM_TimeBaseStructInit(&amp;TIM_TimeBaseStruct);\n    TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;\n    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;\n    TIM_TimeBaseStruct.TIM_Prescaler = 6000 - 1;\n    TIM_TimeBaseStruct.TIM_Period = 10000 - 1;\n    TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;\n    \/\/\u5b9a\u65f6\u5668\u521d\u59cb\u5316\n    TIM_TimeBaseInit(TIM2, &amp;TIM_TimeBaseStruct);\n\n    \/\/\u4f7f\u80fdARR\u9884\u88c5\u8f7d\n    TIM_ARRPreloadConfig(TIM2, ENABLE);\n    \/\/\u6e05\u9664\u66f4\u65b0\u4e2d\u65ad\u6807\u5fd7\u4f4d\n    TIM_ClearFlag(TIM2, TIM_FLAG_Update);\n    \/\/\u4f7f\u80fd\u4e2d\u65ad\n    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);\n\n    \/\/\u4f7f\u80fd\u5b9a\u65f6\u5668\n    TIM_Cmd(TIM2, ENABLE);\n}\n\nvoid NVIC_Config(void)\n{\n    \/\/\u5b9a\u4e49\u4e2d\u65ad\u53e5\u67c4\n    NVIC_InitTypeDef NVIC_InitStruct;\n    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);\n\n    NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;\n    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;\n    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;\n    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;\n\n    \/\/\u521d\u59cb\u5316\u4e2d\u65ad\n    NVIC_Init(&amp;NVIC_InitStruct);\n}\n\nvoid TIM2_IRQHandler(void)\n{\n    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {\n        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);\n        DebugLog(&quot;tim\\n&quot;);\n    }\n}<\/code><\/pre>\n<p>\u5176\u4e2d\u4e2d\u65ad\u670d\u52a1\u51fd\u6570\u7684\u51fd\u6570\u540d\u53ef\u4ee5\u5728\u542f\u52a8\u6587\u4ef6\u7684\u4e2d\u65ad\u5411\u91cf\u8868\u4e2d\u627e\u5230\u3002<\/p>\n<h3>PWM\u8f93\u51fa<\/h3>\n<p>\u5e9f\u8bdd\u4e0d\u591a\u8bf4\uff0c\u4f7f\u7528\u5b9a\u65f6\u56685\u8f93\u51fa\u4e00\u8defPWM\uff1a<\/p>\n<pre><code class=\"language-C\">void MM_PWM_Init(void)\n{\n    \/\/\u5b9a\u4e49GPIO\u3001\u65f6\u57fa\u5355\u5143\u3001\u8f93\u51fa\u6bd4\u8f83\u53e5\u67c4\n    GPIO_InitTypeDef GPIO_InitStruct;\n    TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;\n    TIM_OCInitTypeDef TIM_OCInitStruct;\n\n    \/\/\u4f7f\u80fdGPIO\u4ee5\u53ca\u5b9a\u65f6\u5668\u65f6\u949f\n    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);\n    RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM5, ENABLE);\n\n    \/\/\u521d\u59cb\u5316GPIO\u5f15\u811a\u590d\u7528\u529f\u80fd\n    GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_2);\n    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;\n    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;\n    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;\n    GPIO_Init(GPIOA, &amp;GPIO_InitStruct);\n\n    \/\/\u521d\u59cb\u5316\u65f6\u57fa\u3001\u8f93\u51fa\u6bd4\u8f83\u53e5\u67c4\n    TIM_TimeBaseStructInit(&amp;TIM_TimeBaseStruct);\n    TIM_OCStructInit(&amp;TIM_OCInitStruct);\n\n    \/\/\u65f6\u57fa\u53e5\u67c4\u8d4b\u503c\n    TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;\n    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;\n    TIM_TimeBaseStruct.TIM_Prescaler = 60 - 1;\n    TIM_TimeBaseStruct.TIM_Period = 100000 - 1;\n    TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;\n    \/\/\u8f93\u51fa\u6bd4\u8f83\u53e5\u67c4\u8d4b\u503c\n    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;\n    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;\n    TIM_OCInitStruct.TIM_Pulse = 5000;\n    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;\n    \/\/\u521d\u59cb\u5316\u65f6\u57fa\u3001\u8f93\u51fa\u6bd4\u8f83\u529f\u80fd\n    TIM_TimeBaseInit(TIM5, &amp;TIM_TimeBaseStruct);\n    TIM_OC2Init(TIM5, &amp;TIM_OCInitStruct);\n\n    \/\/\u4f7f\u80fd\u9884\u88c5\u8f7d\u5bc4\u5b58\u5668\n    TIM_OC2PreloadConfig(TIM5, TIM_OCPreload_Enable);\n    TIM_ARRPreloadConfig(TIM5, ENABLE);\n    \/\/\u4f7f\u80fdPWM\u8f93\u51fa\n    TIM_CtrlPWMOutputs(TIM5, ENABLE);\n\n    \/\/\u4f7f\u80fd\u5b9a\u65f6\u5668\n    TIM_Cmd(TIM5, ENABLE);\n}<\/code><\/pre>\n<h2>IIC\u901a\u4fe1<\/h2>\n<p>IIC\u521d\u59cb\u5316\u51fd\u6570\uff1a<\/p>\n<pre><code class=\"language-C\">void MM_I2C_Init(void)\n{\n    GPIO_InitTypeDef GPIO_InitStruct;\n\n    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE);\n\n    GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_4);\n    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_4);\n\n    GPIO_StructInit(&amp;GPIO_InitStruct);\n    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;\n    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;\n    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_20MHz;\n    GPIO_Init(GPIOB, &amp;GPIO_InitStruct);\n\n    I2C_InitTypeDef I2C_Initstruct;\n\n    RCC_APB1PeriphClockCmd(RCC_APB1ENR_I2C1, ENABLE);\n\n    I2C_StructInit(&amp;I2C_Initstruct);\n    I2C_Initstruct.Mode = I2C_Mode_MASTER;\n    I2C_Initstruct.OwnAddress = 0;\n    I2C_Initstruct.ClockSpeed = 100000;\n    I2C_Initstruct.Speed = I2C_Speed_STANDARD;\n    I2C_Init(I2C1, &amp;I2C_Initstruct);\n\n    I2C_Cmd(I2C1, ENABLE);\n}<\/code><\/pre>\n<p>\u4e3a\u4e86\u65b9\u4fbf\u540e\u7eed\u4f7f\u7528\uff0c\u5c01\u88c5\u4e86IIC\u8bfb\u5199\u51fd\u6570\uff0c\u5c01\u88c5\u7684\u8fc7\u7a0b\u633a\u5d0e\u5c96\u7684\uff0c\u4e3b\u8981\u662f\u5e93\u51fd\u6570\u8bf4\u660e\u4e0d\u6e05\u4e0d\u695a\uff0c\u67d0\u4e9b\u6ce8\u91ca\u751a\u81f3\u6709\u95ee\u9898\uff0c\u5bfc\u81f4\u8d70\u4e86\u8bb8\u591a\u5f2f\u8def\u3002<\/p>\n<p>IIC\u5199\u51fd\u6570\uff1a<\/p>\n<pre><code class=\"language-C\">uint8_t MM_I2C_WriteMem(I2C_TypeDef* i2c, uint8_t devAddr, uint8_t regAddr, uint8_t* pData, uint32_t len, uint32_t i2cTimeout)\n{\n    uint32_t timeout;\n\n    I2C_GenerateSTART(i2c, ENABLE);\n\n    \/\/\u53d1\u9001\u4ece\u8bbe\u5907\u5730\u5740\n    I2C_Cmd(i2c, DISABLE);\n    I2C_Send7bitAddress(i2c, devAddr, I2C_Direction_Transmitter);\n    I2C_Cmd(i2c, ENABLE);\n\n    \/\/\u53d1\u9001\u5bc4\u5b58\u5668\u5730\u5740\u5e76\u8d85\u65f6\u7b49\u5f85\n    timeout = i2cTimeout;\n    I2C_SendData(i2c, regAddr);\n    while ((I2C_GetFlagStatus(i2c, I2C_STATUS_FLAG_TFE) == RESET)) {\n        if (timeout-- == 0) {\n            I2C_GenerateSTOP(i2c, ENABLE);\n            return 1;\n        }\n    }\n\n    \/\/\u53d1\u9001\u6570\u636e\u5305\u5e76\u8d85\u65f6\u7b49\u5f85\n    for (int i = 0; i &lt; len; i++) {\n        timeout = i2cTimeout;\n        I2C_SendData(i2c, *(pData + i));\n        while ((I2C_GetFlagStatus(i2c, I2C_STATUS_FLAG_TFE) == RESET)) {\n            if (timeout-- == 0) {\n                I2C_GenerateSTOP(i2c, ENABLE);\n                return 2;\n            }\n        }\n    }\n\n    \/\/\u53d1\u9001\u505c\u6b62\u4fe1\u53f7\n    I2C_GenerateSTOP(i2c, ENABLE);\n\n    return 0;\n}<\/code><\/pre>\n<p>IIC\u8bfb\u51fd\u6570\uff1a<\/p>\n<pre><code class=\"language-C\">uint8_t MM_I2C_ReadMem(I2C_TypeDef* i2c, uint8_t devAddr, uint8_t regAddr, uint8_t* pData, uint32_t len, uint32_t i2cTimeout)\n{\n    uint32_t timeout;\n\n    \/\/\u53d1\u9001\u8d77\u59cb\u4fe1\u53f7\n    I2C_GenerateSTART(i2c, ENABLE);\n\n    \/\/\u53d1\u9001\u4ece\u673a\u5730\u5740\n    I2C_Cmd(i2c, DISABLE);\n    i2c-&gt;IC_TAR = devAddr &gt;&gt; 1;\n    I2C_Cmd(i2c, ENABLE);\n\n    \/\/\u53d1\u9001\u5bc4\u5b58\u5668\u5730\u5740\n    timeout = i2cTimeout;\n    I2C_SendData(i2c, regAddr);\n    while ((I2C_GetFlagStatus(i2c, I2C_STATUS_FLAG_TFE) == RESET)) {\n        if (timeout-- == 0) {\n            I2C_GenerateSTOP(i2c, ENABLE);\n            return 1;\n        }\n    }\n\n    \/\/\u63a5\u6536\u5e76\u8bfb\u53d6\u6570\u636e\n    uint8_t flag = 0, _cnt = 0;\n    for (int i = 0; i &lt; len; i++) {\n        while (1) {\n            \/\/\n            if ((I2C_GetFlagStatus(I2C1, I2C_STATUS_FLAG_TFNF)) &amp;&amp; (flag == 0)) {\n                I2C_ReadCmd(I2C1);\n                if (_cnt++ == len)\n                    flag = 1;\n            }\n            if (I2C_GetFlagStatus(I2C1, I2C_STATUS_FLAG_RFNE)) {\n                pData[i] = I2C_ReceiveData(I2C1);\n                break;\n            }\n        }\n    }\n\n    I2C_GenerateSTOP(i2c, ENABLE);\n\n    return 0;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u62ff\u5230\u82af\u7247\u80af\u5b9a\u662f\u5148\u642d\u5efa\u5f00\u53d1\u73af\u5883\uff0c\u642d\u5efa\u5f00\u53d1\u73af\u5883\u76f8\u5173\u5185\u5bb9\u5728\u8fd9\u7bc7\u6587\u7ae0\u91cc\u9762\u3002 \u5f00\u59cb\u5b66\u4e60\u5355\u7247\u673a\u7684\u7b2c\u4e00\u4ef6\u4e8b&#8212;-\u5148\u770b\u4e00\u773c\u5b83 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[30,14],"class_list":["post-243","post","type-post","status-publish","format-standard","hentry","category-embedded","tag-mm32","tag-14"],"_links":{"self":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts\/243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=243"}],"version-history":[{"count":2,"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts\/243\/revisions"}],"predecessor-version":[{"id":282,"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts\/243\/revisions\/282"}],"wp:attachment":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}