MicroPython中加入了对STM32L476的PORTG支持

下面是使用STM32F103和DS18B20进行温度测量的代码示例: ```c #include "stm32f10x.h" #include "delay.h" #define DQ_OUT PGout(0) //DS18B20的数据线 #define DQ_IN PGin(0) //DS18B20的数据线 u8 DS18B20_Init(void); //初始化 void DS18B20_Write_Byte(u8 dat); //写一个字节 u8 DS18B20_Read_Byte(void); //读一个字节 u16 DS18B20_Read_Temp(void); //读取温度 int main(void) { float temp; u16 t; Delay_Init(); RCC->APB2ENR |= 1<<8; //使能PORTG时钟 GPIOG->CRL &= 0XFFFFFFF0; //PG0设置成输出模式 GPIOG->CRL |= 0X00000003; //最大速度输出 while(DS18B20_Init()); //初始化DS18B20 DS18B20_Write_Byte(0xcc); //跳过ROM操作 DS18B20_Write_Byte(0x44); //开始温度转换 while(1) { DS18B20_Init(); //初始化DS18B20 DS18B20_Write_Byte(0xcc); //跳过ROM操作 DS18B20_Write_Byte(0xbe); //发送读寄存器指令 t=DS18B20_Read_Temp(); //读取温度 temp=t*0.0625; } } //初始化DS18B20 u8 DS18B20_Init(void) { u8 i; DQ_OUT=0; Delay_us(500); DQ_OUT=1; Delay_us(30); i=DQ_IN; Delay_us(500); return i; } //写一个字节 void DS18B20_Write_Byte(u8 dat) { u8 i,j; for (i=0;i<8;i++) { j=dat>>i; j&=0x01; DQ_OUT=0; Delay_us(2); DQ_OUT=j; Delay_us(60); DQ_OUT=1; Delay_us(2); } } //读一个字节 u8 DS18B20_Read_Byte(void) { u8 i,j,dat=0; for (i=0;i<8;i++) { DQ_OUT=0; Delay_us(2); DQ_OUT=1; Delay_us(2); j=DQ_IN; Delay_us(40); dat=(j<<7)|(dat>>1); } return dat; } //读取温度 u16 DS18B20_Read_Temp(void) { u8 ls,ms; u16 temp; DS18B20_Write_Byte(0xcc); //跳过ROM操作 DS18B20_Write_Byte(0xbe); //发送读寄存器指令 ls=DS18B20_Read_Byte(); //读LSB ms=DS18B20_Read_Byte(); //读MSB temp=ms; temp<<=8; temp|=ls; return temp; } ``` 这是一个简单的温度测量示例程序,你可以根据自己的需要进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值