我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图:
1.首先建立rtthread工程
2.编译下载看看调试口是否正常
3.在工程里打开cubemux 进行adc外设配置
4.首先配置外部时钟
5.再配置adc设备,如图我们配置adc1,0通道。
6.相关参数配置如下,我们采用16位模式,相关设置具体含义我们后面再分析,这里先让adc设备跑起来:
7.配置芯片主频:
8.生成工程:
9.打开工程里cubemux文件夹下的主函数,并将标记处static关键字改为extern,我们要在自建的工程里调用,函数前的关键字也要改:
10.打开我们的工程,调用初始化函数,并且读取adc的值如图:
代码如下:
#include <rtthread.h>
#include “rtdevice.h”
#include “main.h”
#define DBG_TAG “main”
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
ADC_HandleTypeDef hadc1;
extern void MX_GPIO_Init(void);
extern void MX_ADC1_Init(void);
int main(void)
{
uint16_t Value;
MX_GPIO_Init();
MX_ADC1_Init();
HAL_ADC_Start(&hadc1);
while (1)
{
LOG_D(“Hello RT-Thread743!”);
rt_thread_mdelay(100);
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)
{
Value=HAL_ADC_GetValue(&hadc1);
rt_kprintf(“HAL_ADC_GetValue= %d !\n”, Value);
HAL_ADC_Start(&hadc1);
}
}
return RT_EOK;
}
11.编译正常下载,分别在PA0引脚上接一个3.3V,和gnd看看串口打印效果:
我们看到接3.3V时,16为值为65535,接gnd时值为1000左右,1000/65535*3.3=0.05V,有点误差都是正常的。
这里adc外设就能够正常使用了,我们这里没有用到rtthread 的外设驱动,因为使用过程中发现rtthread的外设驱动编译错误,很久没有更新,所以先只使用rtthread的内核,外部驱动后面试着改下有问题的地方再发出来。