正点原子精英 STM32F103 开发板在做硬件方面的优势
时间: 2023-06-26 16:05:53 浏览: 139
正点原子精英 STM32F103 开发板在硬件方面的优势主要有以下几点:
1. 高性价比:正点原子精英 STM32F103 开发板价格相对较低,但是性能却非常优秀,可以满足大多数嵌入式开发需求。
2. 强大的处理能力:STM32F103芯片集成了ARM Cortex-M3内核,拥有72MHz的主频,可执行高速运算和高效处理任务。
3. 丰富的外设资源:正点原子精英 STM32F103 开发板拥有多个外设资源,如多路ADC、多路定时器、多路串口等,可满足不同应用场景的需求。
4. 硬件资源丰富:正点原子精英 STM32F103 开发板拥有丰富的硬件资源,如LED指示灯、按键、SD卡接口等,方便用户进行原型设计和开发。
5. 方便的调试工具:正点原子精英 STM32F103 开发板支持ST-LINK/V2下载器,可以通过USB接口直接进行程序下载、调试和烧录,方便快捷。
总之,正点原子精英 STM32F103 开发板在硬件方面的优势主要表现在性价比高、处理能力强、外设资源丰富、硬件资源丰富、调试工具方便等方面,非常适合嵌入式开发爱好者和工程师使用。
相关问题
正点原子精英版 stm32f103ze原理图
正点原子精英版stm32f103ze是一款基于STM32F103ZET6芯片的开发板,支持正点原子Arduino库。它提供了丰富的硬件资源,包括51个GPIO引脚、10个ADC通道、2个DAC通道、4个定时器、3个USART串口、2个SPI接口、2个I2C接口及更多其他功能。
该开发板的原理图是一个详细的电路图,其中显示了所有的电子元件、连线和接口。原理图的目的是帮助我们理解该开发板的电路设计和工作原理,以便我们能够更好地进行开发和调试。
在原理图中,我们可以看到STM32F103ZET6芯片与其他电子元件(如晶体振荡器、电容器、电阻器等)通过电气连接进行连线。这些连接包括供电线路、数据线路和控制线路等。此外,原理图还显示了芯片与外设(如LED、按钮、传感器等)之间的接口连接。
原理图提供了对每个电子元件的详细描述,包括元件型号、参数和引脚的用途。通过阅读原理图,我们可以了解芯片的各个引脚功能,并可以方便地设计和修改连接方式,以满足我们的需求。
总之,正点原子精英版stm32f103ze的原理图是一份非常重要的文档,它帮助我们理解开发板的电路设计和工作原理,以便更好地进行开发和调试。
如何在正点原子精英STM32F103ZET6 开发板中将DHT11读取到的湿温度每隔 5秒发送到电脑串口助手
首先,需要将DHT11模块与STM32F103ZET6开发板连接。DHT11模块的数据引脚可以连接到STM32F103ZET6开发板的任意GPIO引脚,例如PA0。
然后,需要编写STM32F103ZET6开发板的程序,使用STM32的GPIO库和串口库读取DHT11模块的数据,并将湿温度数据发送到串口。
以下是一个简单的示例代码:
```c
#include "stm32f10x.h"
#include "stdio.h"
#define DHT11_PIN GPIO_Pin_0
#define DHT11_PORT GPIOA
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
void delay_us(uint32_t us)
{
while (us--)
{
__NOP();
__NOP();
__NOP();
__NOP();
}
}
void USART_SendString(char* s)
{
while (*s)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1, *s++);
}
}
void USART_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void DHT11_Init(void)
{
GPIO_InitStructure.GPIO_Pin = DHT11_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DHT11_PORT, &GPIO_InitStructure);
GPIO_SetBits(DHT11_PORT, DHT11_PIN);
delay_us(1000);
}
uint8_t DHT11_Read_Data(uint8_t* data)
{
uint8_t i, j, byte;
uint8_t buffer[5] = {0};
GPIO_InitStructure.GPIO_Pin = DHT11_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DHT11_PORT, &GPIO_InitStructure);
GPIO_ResetBits(DHT11_PORT, DHT11_PIN);
delay_us(18000);
GPIO_SetBits(DHT11_PORT, DHT11_PIN);
delay_us(40);
GPIO_InitStructure.GPIO_Pin = DHT11_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DHT11_PORT, &GPIO_InitStructure);
if (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) == SET)
{
return 1;
}
delay_us(80);
if (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) == RESET)
{
return 1;
}
delay_us(80);
for (i = 0; i < 5; i++)
{
byte = 0;
for (j = 0; j < 8; j++)
{
while (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) == RESET);
delay_us(40);
if (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) == SET)
{
byte |= (1 << (7 - j));
}
while (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) == SET);
}
buffer[i] = byte;
}
if (buffer[4] != (buffer[0] + buffer[1] + buffer[2] + buffer[3]))
{
return 1;
}
data[0] = buffer[0];
data[1] = buffer[2];
return 0;
}
int main(void)
{
uint8_t data[2];
float temperature, humidity;
USART_Config();
DHT11_Init();
while (1)
{
if (DHT11_Read_Data(data) == 0)
{
humidity = (float)data[0];
temperature = (float)data[1];
USART_SendString("Humidity: ");
USART_SendString(humidity);
USART_SendString("%, Temperature: ");
USART_SendString(temperature);
USART_SendString("C\n");
}
else
{
USART_SendString("Error reading data from DHT11\n");
}
delay_us(5000000);
}
}
```
这个代码会在开发板上初始化串口和DHT11模块,并且循环读取DHT11模块的数据并发送到串口。每次循环间隔5秒钟。
你只需要将开发板连接到电脑,并使用串口调试工具(如串口助手)打开相应的串口,就可以看到DHT11的湿温度数据了。