資源簡介
利用STM32F407開發板對MAX30102體溫模塊的開發,可以接受整形數據,需要對IIC串口初始化,還有數據協議包的發送
代碼片段和文件信息
#include?
#include?“stm32f4xx.h“
#include?“SysTick.h“
void?GECM4_AT24CXX_INIT(void)
{
//?1.?配置i2c1引腳
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB?ENABLE);
GPIO_InitTypeDef?p;
p.GPIO_Mode?=?GPIO_Mode_AF;
p.GPIO_OType?=?GPIO_OType_OD;
p.GPIO_Pin?=?GPIO_Pin_8?|?GPIO_Pin_9;
p.GPIO_PuPd?=?GPIO_PuPd_NOPULL;
p.GPIO_Speed?=?GPIO_Speed_50MHz;
GPIO_Init(GPIOB??&p);
GPIO_PinAFConfig(GPIOB?GPIO_PinSource8?GPIO_AF_I2C1);
GPIO_PinAFConfig(GPIOB?GPIO_PinSource9?GPIO_AF_I2C1);
//?2.?初始化I2C控制器
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1?ENABLE);
I2C_InitTypeDef?i;
i.I2C_Ack?=?I2C_Ack_Enable;
i.I2C_AcknowledgedAddress?=?I2C_AcknowledgedAddress_7bit;
i.I2C_ClockSpeed?=?100000;
i.I2C_DutyCycle?=?I2C_DutyCycle_16_9;
i.I2C_Mode?=?I2C_Mode_I2C;
i.I2C_OwnAddress1?=?0x55;?//沒用到
I2C_Init(I2C1?&i);
//?3.?I2C?Enable
I2C_Cmd(I2C1?ENABLE);
}
void?Write_A_Byte_To_Max30102(uint8_t?word_addr??uint8_t?data)
{
//(1)?Send?Start?Signal
//printf(“%d\r\n“?__LINE__);
//當IIC總線BUSY時,我們一直等
while?(?I2C_GetFlagStatus(I2C1?I2C_FLAG_BUSY)?==?SET?);?
//printf(“%d\r\n“?__LINE__);
//產生一個i2c起始信號
I2C_GenerateSTART(I2C1?ENABLE);
//printf(“%d\r\n“?__LINE__);
//wait?EV5
while?(?I2C_CheckEvent(I2C1?I2C_EVENT_MASTER_MODE_SELECT)?==?ERROR);
//printf(“%d\r\n“?__LINE__);
//------
//?I2C?Slave?ADDR(表示你要與哪個設備通信)
I2C_Send7bitAddress(I2C1??0xAE?I2C_Direction_Transmitter);?//主發
//wait?EV6???;?Master?Send??mode
while?(?I2C_CheckEvent(I2C1?
I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)?==?ERROR);
//?Send?Word?Addr
I2C_SendData(I2C1?word_addr);
//wait?EV8
while?(?I2C_CheckEvent(I2C1?
I2C_EVENT_MASTER_BYTE_TRANSMITTING)?==?ERROR);
//Send?data
I2C_SendData(I2C1?data);
//wait?EV8
while?(?I2C_CheckEvent(I2C1?
I2C_EVENT_MASTER_BYTE_TRANSMITTED)?==?ERROR);
I2C_GenerateSTOP(I2C1?ENABLE);
//printf(“finished\r\n“);
}
uint8_t??Read_A_Byte_From_Max30102(uint8_t?word_addr)
{
uint8_t?recv;
//(1)?Send?Start?Signal
//當IIC總線BUSY時,我們一直等
while?(?I2C_GetFlagStatus(I2C1?I2C_FLAG_BUSY)?==?SET?);?
//printf(“%s?L_%d\n“?__FUNCTION__?__LINE__);
//產生一個i2c起始信號
I2C_GenerateSTART(I2C1?ENABLE);
//?wait?ev5
while?(?I2C_CheckEvent(I2C1?I2C_EVENT_MASTER_MODE_SELECT)?==?ERROR);
//send?I2C?Slave?ADDR
I2C_Send7bitAddress(I2C1?0xAE?I2C_Direction_Transmitter);
//?wait?ev6
while?(?I2C_CheckEvent(I2C1?
I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)?==?ERROR);
//??word?addr
I2C_SendData(I2C1word_addr);
while?(?I2C_CheckEvent(I2C1?I2C_EVENT_MASTER_BYTE_TRANSMITTED)?==?ERROR);
I2C_GenerateSTART(I2C1?ENABLE);
//?wait?ev5
while?(?I2C_CheckEvent(I2C1?I2C_EVENT_MASTER_MODE_SELECT)?==?ERROR);
//send?I2C?Slave?ADDR
I2C_Send7bitAddress(I2C1?0xAF?I2C_
評論
共有 條評論