#include "stm32f4xx.h" #include "./usart/bsp_debug_usart.h" #include "./adc/bsp_adc.h" // ADC转换的电压值通过MDA方式传到SRAM extern __IO uint16_t ADC_ConvertedValue[RHEOSTAT_NOFCHANEL]; // 局部变量,用于保存转换计算后的电压值 float ADC_ConvertedValueLocal[RHEOSTAT_NOFCHANEL]={0}; static void Delay(__IO uint32_t nCount) //简单的延时函数 { for(; nCount != 0; nCount--); } /** * @brief 主函数 * @param 无 * @retval 无 */ int main(void) { /*初始化USART 配置模式为 115200 8-N-1,中断接收*/ Debug_USART_Config(); Rheostat_Init(); while (1) { ADC_ConvertedValueLocal[0] =(float) ADC_ConvertedValue[0]/4096*(float)3.3; ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*(float)3.3; ADC_ConvertedValueLocal[2] =(float) ADC_ConvertedValue[2]/4096*(float)3.3; ADC_ConvertedValueLocal[3] =(float) ADC_ConvertedValue[3]/4096*(float)3.3; ADC_ConvertedValueLocal[4] =(float) ADC_ConvertedValue[4]/4096*(float)3.3; ADC_ConvertedValueLocal[5] =(float) ADC_ConvertedValue[5]/4096*(float)3.3; ADC_ConvertedValueLocal[6] =(float) ADC_ConvertedValue[6]/4096*(float)3.3; ADC_ConvertedValueLocal[7] =(float) ADC_ConvertedValue[7]/4096*(float)3.3; //printf("\r\n CH1_PA1 value = %f V \r\n",ADC_ConvertedValueLocal[0]); //printf("\r\n CH2_PA2 value = %f V \r\n",ADC_ConvertedValueLocal[1]); //printf("\r\n CH3_PA3 value = %f V \r\n",ADC_ConvertedValueLocal[2]); //printf("\r\n CH4_PA4 value = %f V \r\n",ADC_ConvertedValueLocal[3]); //printf("\r\n CH5_PA5 value = %f V \r\n",ADC_ConvertedValueLocal[4]); //printf("\r\n CH6_PA6 value = %f V \r\n",ADC_ConvertedValueLocal[5]); //printf("\r\n CH1_PA1 value = %f V \r\n",ADC_ConvertedValueLocal[6]); //printf("\r\n CH1_PA1 value = %f V \r\n",ADC_ConvertedValueLocal[7]); printf("\r\n %f %f %f \r\n",ADC_ConvertedValueLocal[7],ADC_ConvertedValueLocal[2],ADC_ConvertedValueLocal[4]); //printf("\r\n\r\n"); Delay(0xafffff); } } /*********************************************END OF FILE**********************/
时间: 2023-06-24 17:05:55 浏览: 207
这是一个基于STM32F4的ADC采集电压值并传输到串口的程序。程序中通过调用ADC转换后的电压值,并计算出实际电压值,然后通过串口输出显示。其中还包含一个简单的延时函数用来控制输出频率。需要注意的是,程序中使用了外部定义的ADC_ConvertedValue数组,该数组实际上是在另外一个文件中定义的,这里只是通过extern关键字引用该数组。
相关问题
#include "main.h" #include "adc.h" #include "tim.h" #include "usart.h" #include "gpio.h" #include "../../icode/oled/XMF_OLED_STM32Cube.h" #include "../../icode/delay/delay.h" #include "stdio.h"的作用
这些是STM32Cube IDE自动生成的头文件,具有以下功能:
1. main.h: 包含了主函数(main)所需的头文件,例如系统初始化的头文件、中断处理的头文件等等。
2. adc.h: 包含了ADC(模数转换器)相关的头文件和函数定义,可以在程序中使用ADC进行模拟信号的采集。
3. tim.h: 包含了定时器相关的头文件和函数定义,可以在程序中使用定时器进行定时操作。
4. usart.h: 包含了串口通信相关的头文件和函数定义,可以在程序中使用串口进行通信。
5. gpio.h: 包含了GPIO(通用输入输出)相关的头文件和函数定义,可以在程序中使用GPIO控制硬件的输入输出。
6. XMF_OLED_STM32Cube.h: 包含了OLED显示屏相关的头文件和函数定义,可以在程序中使用OLED显示屏进行图像和文字的显示。
7. delay.h: 包含了延时相关的头文件和函数定义,可以在程序中使用延时函数进行时间控制。
8. stdio.h: 包含了标准输入输出库相关的头文件和函数定义,可以在程序中使用printf等函数进行调试输出。
这些头文件和函数的集合,可以让程序员更加方便地使用STM32开发板进行开发和调试,提升开发效率和代码可读性。
#include "delay.h" #include "sys.h" #include "oled.h" #include "bmp.h" #include "pwm.h" #include "stm32f10x_tim.h" #include "adc.h" #include "irq.h" #include "pid.h" #include "key.h" #include "dht11.h" #include "usart.h" //#include "dht11.h" int wendu=0,shidu=0; int yewei=0; int time=0; int Accelerated=0; int Accelerated_z=0; int Accelerated_x=0; int main(void) { //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //IRQ_INT(999,79);//Öжϳõʼ»¯ 500ms 7199·ÖƵ key_init(); uart_init(9600); //´®¿Ú³õʼ»¯Îª9600 delay_init(); Adc_Init(); while(1) { //ADCÉèÖúà Accelerated=Get_Adc(6); Accelerated_z=Accelerated/256; Accelerated_x=Accelerated-Accelerated_z; delay_ms(10); USART_SendData(USART1,Accelerated_z); delay_ms(10); USART_SendData(USART1,Accelerated_x); }解释一下这个程序并在每一行加上备注
程序主要实现了读取ADC值,并通过串口发送到上位机。下面是每一行的注释:
```
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
#include "pwm.h"
#include "stm32f10x_tim.h"
#include "adc.h"
#include "irq.h"
#include "pid.h"
#include "key.h"
#include "dht11.h"
#include "usart.h"
int wendu=0,shidu=0; //定义温度湿度变量
int yewei=0; //定义液位变量
int time=0; //定义时间变量
int Accelerated=0; //定义加速度变量
int Accelerated_z=0; //定义加速度Z轴变量
int Accelerated_x=0; //定义加速度X轴变量
int main(void) {
key_init(); //按键初始化
uart_init(9600); //串口初始化为9600波特率
delay_init(); //延时函数初始化
Adc_Init(); //ADC初始化
while(1) {
Accelerated=Get_Adc(6); //读取ADC6通道的值
Accelerated_z=Accelerated/256; //计算Z轴加速度
Accelerated_x=Accelerated-Accelerated_z; //计算X轴加速度
delay_ms(10); //延时10ms
USART_SendData(USART1,Accelerated_z); //通过串口发送Z轴加速度值
delay_ms(10); //延时10ms
USART_SendData(USART1,Accelerated_x); //通过串口发送X轴加速度值
}
}
```
这个程序主要是读取ADC的值,并通过串口发送到上位机。其中,加速度传感器的输出值被连接到了ADC6通道,计算Z轴和X轴加速度的方法是将ADC值除以256和取余。通过USART_SendData函数将数据发送到串口1,以便上位机读取。
阅读全文