本篇利用ADC获取NTC的电压值,再通过串口打印出电压值。
N32G457
(1)ADC
支持最多4个12位5Msps采样率的逐次比较型ADC,支持单端输入和差分输入,可测量40个外部和7个内部信
号源,其中ADC1支持11个外部通道, ADC2支持13个外部通道, ADC3支持15个外部通道, ADC4支持13个
外部通道
1、ADC主要特性描述如下:
支持 12 位、 10 位、 8 位、 6 位分辨率可配置
12bit 分辨率下最高采样速率 5.14MSPS
10bit 分辨率下最高采样速率 6MSPS
8bit 分辨率下最高采样速率 7.2MSPS
6bit 分辨率下最高采样速率 9MSPS
ADC 时钟源分为工作时钟源、采样时钟源和计时时钟源
仅可配置 AHB_CLK 作为工作时钟源,最高可到 144MHz
可配置 PLL 作为采样时钟源,最高可到 72MHz,支持分频 1,2,4,6,8,10,12,16,32,32,64,128,256
可配置 AHB_CLK 作为采样时钟源,最高可到 72MHz,支持分频 1,2,4,6,8,10,12,16,32
计时时钟用于内部计时功能,频率必须配置成 1MHz
支持定时器触发 ADC 采样
转换结束、注入转换结束和发生模拟看门狗事件时产生中断
单次和连续转换模式
从通道 0 到通道 N 的自动扫描模式
支持自校准
带内嵌数据一致性的数据对齐
采样间隔可以按通道分别编程
规则转换和注入转换均有外部触发选项
间断模式
双重模式, ADC1 和 ADC2 组合、 ADC3 和 ADC4 组合
ADC 供电要求: 1.8V 到 3.6V
ADC 输入范围: VREF- ≤ VIN ≤ VREF+
ADC 可以使用 DMA 操作,规则通道转换期间有 DMA 请求产生
模拟看门狗功能,可以非常精准地监视一路、多路或所有选中的通道,当被监视的信号超出预置的阀
值时,将产生中断
2、ADC功能框图:
3、连接温度传感器设置:
4、ADC寄存器
(2)串口
通用同步/异步收发器(USART)
N32G457系列产品中,集成了7个串行收发接口,包括3个通用同步/异步收发器(USART1、 USART2和
USART3),和4个通用异步收发器(UART4、 UART5、 UART6、 UART7)。这7个接口提供异步通信、支持IrDA
SIR ENDEC传输编解码、多处理器通信模式、单线半双工通信模式和LIN主/从功能。
USART1/ UART6/UART7接口通信速率可达4.5Mbit/秒,其它接口的通信速率可达2.25Mbit/秒。
USART1、 USART2和USART3接口具有硬件的CTS和RTS信号管理、兼容ISO7816的智能卡模式和类SPI通
信模式,所有接口都可以使用DMA操作。
USART主要特性如下:
全双工的,异步通信
NRZ标准格式
分数波特率发生器系统,波特率可编程,用于发送和接收,最高达4.5Mbits/s
可编程数据字长度(8位或9位)
可配置的停止位,支持1或2个停止位
LIN主发送同步断开符的能力以及LIN从检测断开符的能力,当USART硬件配置成LIN时,生成13位断
开符,检测10/11位断开符
输出发送时钟用于步传输
IRDA SIR 编码器解码器,在正常模式下支持3/16位的持续时间
智能卡模拟功能
智能卡接口支持ISO7816-3标准里定义的异步智能卡协议
智能卡用到的0.5和1.5个停止位
单线半双工通信
可配置的使用DMA的多缓冲器通信,在SRAM里利用集中式DMA缓冲接收/发送字节
独立的的发送器和接收器使能位
检测标志
接收缓冲器满
1、配置模式
2、框图
3、串口寄存器
(3)输出结果
开发板与NTC连接方式:
(4)核心代码
主函数:
BspInit();
/SystemInit() function has been called by startup file startup_n32g45x.s/
// LedInit(PORT_GROUP1, LED4_PIN | LED2_PIN);//pb4 pb5
// LedInit(PORT_GROUP2, LED1_PIN); //pa8
//LedOff( PORT_GROUP1, LED2_PIN); //pb4
/Turn on Led1/
// LedOn(PORT_GROUP1, LED1_PIN);
printf("app runing...\r\n");
printf("CPU clock=%d\r\n",SystemCoreClock);
while (1)
{
Delay(0x28FFFF);
LED(1,Bit_SET);
LED(2,Bit_SET);
LED(3,Bit_SET);
Delay(0x28FFFF);
LED(1,Bit_RESET);
LED(2,Bit_RESET);
LED(3,Bit_RESET);
/Turn on Led3/
// LedOn( PORT_GROUP1, LED4_PIN); //pb5
// LedBlink( PORT_GROUP2, LED1_PIN); //pa8
// LedBlink( PORT_GROUP1, LED2_PIN); //pb4
/* Insert delay */
Delay(0x28FFFF);
ADC_ClearFlag(ADC1,ADC_FLAG_ENDC);
ADC_EnableSoftwareStartConv(ADC1,ENABLE);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ENDC)==RESET);
adc_value=ADC_GetDat(ADC1);
adc_v=(double)adc_value/(double)4095*3.3;
printf("PC0 Volt=%0.2f\r\n",adc_v);
ADC初始化:
//adc pll=72mhz
GPIO_InitType gpio;
ADC_InitType adc_InitStructure;
RCC_ConfigAdcPllClk(RCC_ADCPLLCLK_DIV2,ENABLE);
//adc hclk/2=72mhz
RCC_ConfigAdcHclk(RCC_ADCHCLK_DIV2);
//adc 1m??
RCC_ConfigAdc1mClk(RCC_ADC1MCLK_SRC_HSI,RCC_ADC1MCLK_DIV8);
//AD1????
RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC1,ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC,ENABLE);
gpio.Pin=GPIO_PIN_6;
gpio.GPIO_Mode=GPIO_Mode_AIN;
gpio.GPIO_Speed=GPIO_INPUT;
GPIO_InitPeripheral(GPIOC,&gpio);
adc_InitStructure.WorkMode=ADC_WORKMODE_INDEPENDENT;
adc_InitStructure.MultiChEn=DISABLE;
adc_InitStructure.ContinueConvEn=DISABLE;
adc_InitStructure.ExtTrigSelect=ADC_EXT_TRIGCONV_NONE;
adc_InitStructure.DatAlign=ADC_DAT_ALIGN_R;
adc_InitStructure.ChsNumber=1;
ADC_Init(ADC1,&adc_InitStructure);
ADC_Enable(ADC1,ENABLE);
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1)==SET);
ADC_ConfigRegularChannel(ADC1,ADC_CH_6,1,ADC_SAMP_TIME_1CYCLES5);
串口初始化:
GPIO_InitType GPIO_InitStructure;
USART_InitType USART_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_USART1 | RCC_APB2_PERIPH_GPIOA, ENABLE);
GPIO_InitStructure.Pin = GPIO_PIN_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
USART_InitStructure.BaudRate = 115200;
USART_InitStructure.WordLength = USART_WL_8B;
USART_InitStructure.StopBits = USART_STPB_1;
USART_InitStructure.Parity = USART_PE_NO ;
USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
USART_Init(USART1, &USART_InitStructure);
USART_Enable(USART1, ENABLE);