久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1904|回復: 0
收起左側

stm32f4標準庫開發—模擬iic

[復制鏈接]
ID:235207 發表于 2022-1-8 00:24 | 顯示全部樓層 |閱讀模式
stm32f4標準庫開發——模擬iic主要概念:
IIC總線:I2C總線是一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息。
IIC總線定義:時鐘線:sck數據線:sda
軟件模擬:通過軟件控制普通GPIO 引腳高低點評切換,來模擬總線時序,從而達到與總線協議一樣的效果。
缺點:與使用硬件IIC 相比,會占用更多的 CPU 時間。

實驗目的:
本實現通過軟件模擬IIC 時序,編寫 IIC 發送接收函數。

硬件電路:
本實驗的蜂鳴器為有源蜂鳴器
PB8-->  IIC_SCL
PB9-->  IIC_SDA
08_hardware1.png

主要庫函數調用:
#define sda_in() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;} #define sda_out() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} #define iic_sda_out(x) PBout(9)=x #define iic_scl_out(x) PBout(8)=x #define iix_read_sda() PBin(9) 代碼: //iic.c #include "iic.h" #include "base.h" #include "delay.h" //*********************************************************************** //移

植修改部分

#define sda_in() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;} #define sda_out() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} #define iic_sda_out(x) PBout(9)=x #define iic_scl_out(x) PBout(8)=x #define iix_read_sda() PBin(9) static void iic_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB, &GPIO_InitStructure); } static void iic_gpio_deinit(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure); }

//*********************************************************************** void iic_init(void) { iic_gpio_init(); iic_scl_out(1); iic_sda_out(1); } void iic_deinit(void) { iic_gpio_deinit(); iic_scl_out(1); iic_sda_out(1); } void iic_start(void) { sda_out(); iic_sda_out(1); iic_scl_out(1); delay_us(4); iic_sda_out(0); delay_us(4); iic_scl_out(0); } void iic_stop(void) { sda_out(); iic_scl_out(0); iic_sda_out(0); delay_us(4); iic_scl_out(1); iic_sda_out(1); delay_us(4); } uint8_t iic_wait_ack(void) { uint8_t ucerrtime = 0; sda_in(); iic_sda_out(1); delay_us(1); iic_scl_out(1); delay_us(1); while(iix_read_sda()) { ucerrtime++; if(ucerrtime > 250) { iic_stop(); return 1; } } iic_scl_out(0); return 0; } void iic_ack(void) { iic_scl_out(0); sda_out(); iic_sda_out(0); delay_us(2); iic_scl_out(1); delay_us(2); iic_scl_out(0); } void iic_nack(void) { iic_scl_out(0); sda_out(); iic_sda_out(1); delay_us(2); iic_scl_out(1); delay_us(2); iic_scl_out(0); } void iic_send_byte(uint8_t txd) { uint8_t t; sda_out(); iic_scl_out(0); for(t = 0; t < 8; t++) { iic_sda_out((txd & 0x80) >> 7); txd <<= 1; delay_us(2); iic_scl_out(1); delay_us(2); iic_scl_out(0); delay_us(2); } } uint8_t iic_read_byte(unsigned char ack) { unsigned char i, receive = 0; sda_in(); for(i = 0; i < 8; i++ ) { iic_scl_out(0); delay_us(2); iic_scl_out(1); receive <<= 1; if(iix_read_sda()) receive++; delay_us(1); } if (!ack) iic_nack(); else iic_ack(); return receive; }

//iic.h #ifndef _IIC_H #define _IIC_H #include "stdint.h" void iic_init(void); void iic_deinit(void); void iic_start(void); void iic_stop(void); void iic_send_byte(uint8_t txd); uint8_t iic_read_byte(unsigned char ack); uint8_t iic_wait_ack(void); void iic_ack(void); void iic_nack(void); void iic_write_one_byte(uint8_t daddr, uint8_t addr, uint8_t data); uint8_t iic_read_one_byte(uint8_t daddr, uint8_t addr); #endif

編譯運行:result
如下,編譯無報錯,無警告。
01_build.png

總結:
理論上gpio操作加上精確的延時,能模擬出任何總線的時序
iic.c將移植部分單獨摘取出來,方便未來的移植開發


關注公號InsertingAll,獲取嵌入式學習資源,學習更多嵌入式知識


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级黄色免费视频 | 91最新在线 | 日本一区二区三区在线视频 | 日本不卡二区 | 精品免费国产一区二区三区四区 | 日韩欧美在线视频 | 日产精品久久久一区二区 | 精品一区二区三区免费 | 涩涩的视频 | 日韩免费高清视频 | 福利色导航 | 中文字幕一区二区三区四区 | 欧美一区二区免费 | 日韩福利在线 | 99超碰在线观看 | 天天有av | 黄色免费大片 | 麻豆久久久 | 麻豆视频一区二区 | 麻豆国产一区二区三区四区 | 国产成人黄色 | 五月在线视频 | 一区二区三区四区精品 | 亚洲精品在线视频观看 | 黄色av免费看 | 天堂av片 | 国产又黄又爽 | 中文字幕www | 国产一级生活片 | 成人免费毛片男人用品 | 一级毛片免费播放视频 | 精品久久久久久久久久久久久久久久 | 国产精品视频网 | 91调教打屁股xxxx网站 | 国产麻豆视频 | 天天干天天插 | 日本成人一区二区三区 | 在线观看国产一区二区 | a级片免费观看 | 欧美在线观看一区二区三区 | 少妇福利视频 |