/* at24c02.c */
#include <stm32f10x.h>
#include "init.h"
#include "iic.h"
#define send_slave_addr(a) iic_send_byte(a)
#define send_rom_addr(a) iic_send_byte(a)
#define ROM_SIZE (2*1024) //2K
#define ADDR_SIZE 256
#define PAGE_SIZE 8
#define PAGE 32
int at24c02_init(unsigned char slave_addr)
{
iic_init();
iic_start();
send_slave_addr(slave_addr|IIC_WRITE);
if(iic_recv_ack())
return 0;
else
return 1;
}
int set_rom_addr(unsigned addr)
{
send_rom_addr(addr);
if(iic_recv_ack())
return 0;
else
return 1;
}
int at24c02_write_unpage( unsigned char slave_addr,
unsigned char start_addr,
char buff[],
unsigned char size)
{
delay_ms(1);
if(0 == at24c02_init(slave_addr))
return -1;
if(0 == set_rom_addr(start_addr))
return -1;
if(size > iic_send_str(buff,size))
{
iic_stop();
return 0;
}
else
{
iic_stop();
return 1;
}
}
int at24c02_write_page(unsigned char slave_addr,
unsigned char start_addr,
char buff[])
{
delay_ms(1);
if(0 == at24c02_init(slave_addr))
return -1;
if(0 == set_rom_addr(start_addr))
return -1;
if(8 > iic_send_str(buff,8))
{
iic_stop();
return 0;
}
else
{
iic_stop();
return 1;
}
}
int at24c02_write(unsigned char slave_addr,
unsigned char start_addr,
char buff[],
unsigned char size)
{
unsigned char addr = 0;
unsigned char send_byte;
unsigned char i;
char temp;
addr = 8 + ((unsigned char)(start_addr/8))*8;//Get Next Page Frist Address
send_byte = addr - start_addr;
if(size <= send_byte)
{
if(-1 == at24c02_write_unpage(slave_addr,start_addr,buff,size))
return -1;
else
return 0;
}
else
{
if(-1 == at24c02_write_unpage(slave_addr,start_addr,buff,send_byte))
return -1;
}
size -= send_byte;
buff += send_byte;
delay_ms(5);
temp = (char)(size/8);
for(i=0; i start_addr = addr; if(-1 == at24c02_write_page(slave_addr,start_addr,buff)) return -1; addr += 8; size -= 8; buff += 8; delay_ms(5); } start_addr = addr; if(-1 == at24c02_write_unpage(slave_addr,start_addr,buff,size)) return -1; return 0; } int at24c02_read( unsigned char slave_addr, unsigned char start_addr, char buff[], unsigned char size) { delay_ms(1); if(0 == at24c02_init(slave_addr)) return -1; if(0 == set_rom_addr(start_addr)) return -1; iic_start(); send_slave_addr(slave_addr|IIC_READ); if(iic_recv_ack()) return -1; iic_recv_str(buff,size); iic_stop(); return size; } 應用例子: int main() { char str[512]; int length = 0; sys_init(9); rs232_init(CPU_72M,9600); rs232_send_byte('n'); if(-1 == at24c02_write(SLAVE_ADDR,6,__NOTE,strlen(__NOTE))) rs232_send_str("Write AT24C02 Fail!n",20); delay_ms(1000); if(-1 == (length = at24c02_read(SLAVE_ADDR,0,str,64))) rs232_send_str("Read AT24C02 Fail!n",20); rs232_send_str("Read:",strlen("Read:")); rs232_send_str(str,strlen(str)); return 0; }
上一篇:STM32 加入調試信息來調試代碼
下一篇:【菜鳥入門】stm32的第一個程序--LED
推薦閱讀
史海拾趣
TDK公司,作為全球知名的電子元器件制造商,早在上世紀80年代就開始涉足EMI濾波器領域。當時,隨著電子設備的日益普及,電磁干擾問題逐漸凸顯。TDK看準市場需求,投入大量資源進行EMI濾波器的研發。初期,他們面臨著技術難題和市場接受度的挑戰。然而,通過不斷的技術創新和產品迭代,TDK的EMI濾波器逐漸在市場上站穩了腳跟。他們的產品在計算機、通信設備等領域得到了廣泛應用,有效解決了電磁干擾問題,提升了設備的穩定性和可靠性。
隨著公司的發展,Falco Electronics開始積極拓展市場。公司不僅在國內市場取得了顯著成績,還積極開拓國際市場。同時,Falco Electronics還與其他行業領軍企業開展戰略合作,共同開發新產品、拓展新市場。這些合作不僅為公司帶來了更多的商機,也提升了公司在行業內的地位和影響力。
AMRI Enterprise Co Ltd注重與高校和研究機構的產學研合作,通過引進先進技術和人才,推動公司的技術創新。公司與多所知名高校建立了緊密的合作關系,共同開展科研項目和技術攻關。這些合作不僅為AMRI帶來了前沿的技術成果,還提升了公司的研發能力和創新能力。在產學研合作的推動下,AMRI不斷推出具有創新性和競爭力的新產品,為公司的持續發展提供了強有力的支撐。
隨著技術的不斷進步,AIRPAX在傳感器和電氣保護領域取得了重大突破。其研發的全新傳感器技術大大提高了測量精度和響應速度,為汽車、家電等行業提供了更高效、更安全的解決方案。這一技術突破使得AIRPAX的產品開始在更廣泛的行業中得到應用,公司也逐漸發展成為電氣保護領域的領軍企業。
DATATRONICS高度重視人才戰略的實施。公司積極引進和培養了一批高素質的技術人才和管理人才,為他們提供了良好的工作環境和發展空間。同時,DATATRONICS還建立了完善的激勵機制和培訓機制,鼓勵員工不斷創新和進取,共同推動公司的持續發展。
DATATRONICS公司自成立以來,一直致力于電子技術的研發與創新。某年,公司研發團隊成功突破了一項關鍵技術瓶頸,開發出了一款高效能的數據處理芯片。這款芯片以其卓越的性能和穩定性,迅速獲得了市場的認可。DATATRONICS借此機會,進一步擴大了產品線,提高了市場競爭力。
ATM監控專業評標標準!!! 資質審查1. 數字錄像設備和微型攝像機同時獲得公安部安全防范報警系統產品質量監督檢驗測試中心出具的型式檢驗報告。 依據標準: A. 公安部關于貫徹實施《安全技術防范產品管理辦法》有關問題的補充通知第二條 B. 《 ...… 查看全部問答∨ |
|
紅外遙控器已經廣泛使用在彩電、音響系統和各種家用電器中。遙控器的控制距離一般可到6~8米,使用非常方便。因紅外遙控方式用量大,所以其紅外發射、接收電路均有完整的配套器件,這些器件不僅售價低而且可靠,電路極其簡單。電子愛好者完全可以利 ...… 查看全部問答∨ |
|
/************************************************************* 程序功能:對P6.0對應的模擬通道進行多次轉換后,將32次平均值 在數碼管上顯示(數碼管顯示的只是ADC的轉換結果而不 &n ...… 查看全部問答∨ |
|
去年 10 月,芯片制造廠家 Adapteva 計劃創造一款跟 Raspberry Pi 一樣大小的計算機“Parallella”,但是其性能卻可以勝任超級計算機能完成的任務,于是 Adapteva 在眾籌平臺 Kickstarter 上發起了一項 75 萬美元融資額的眾籌項目,經過兩個月時間 ...… 查看全部問答∨ |
|
本帖最后由 我不是技術宅 于 2016-1-21 17:44 編輯 ZigBee的低功耗是大家非常在意的一件事,譬如紐扣電池的供電設備。(擼主現在PM3 能做到0.3uA的樣子,核心板) 今天擼主碼子太多,就簡單提兩句: 1、入網功耗控制 掃描網絡的時候,會增加特 ...… 查看全部問答∨ |
NIOS step by step [ hello word + LED blink ] 送給還沒有 搞 NIOS的朋友,高手 就不要浪費時間啦。 大家都在玩 SOPC的時候,我就眼饞了! 在痛苦了, 1.5H + 1H + 8H 后,終于跑通了。 留念下,讓開始要弄得朋友 不痛苦,不捉急。 … 查看全部問答∨ |