3961|1

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

新驱动力MM32F103测试(三)UART+ADC [复制链接]

本帖最后由 lising 于 2018-10-31 18:18 编辑

      本次实验利用MM32F103C8T6的ADC外设采集芯片内部温度,并通过串口发送至PC端利用串口调试助手进行显示。
一、实验资源
1、MM32F103开发板;
2、KEIL 5.25.2;
3、J-LINK V9;
4、串口助手 SSCOM V5.13.1;
5、新驱动力提供的开发例程;

二、实验过程
1、先调试UART。根据电路图可以了解到,系统采用CH340T芯片进行USB-TTL转换,并且与MCU的PA9、PA10即UART1相连;


2、安装CH340驱动后可以在“设备管理器”看到此设备端口号为“COM5”;


3、串口发送程序。实验程序相对比较简单只是发送,在串口初始化程序中主要对UART1进行相应设置,比如:波特率为115200、8位数据位、1位停止、无校验。PA9为UART1_TX,将其配置复用推挽输出。最后还要打开GPIOA及UART1时钟。初始化代码:
  1. void uart_initwBaudRate(u32 bound)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         UART_InitTypeDef UART_InitStructure;
  5.         
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1|RCC_APB2Periph_GPIOA, ENABLE);        //使能UART1,GPIOA时钟

  7.         UART_InitStructure.UART_BaudRate = bound;                                                                //串口波特率
  8.         UART_InitStructure.UART_WordLength = UART_WordLength_8b;//字长为8位数据格式
  9.         UART_InitStructure.UART_StopBits = UART_StopBits_1;                        //一个停止位
  10.         UART_InitStructure.UART_Parity = UART_Parity_No;                                //无奇偶校验位
  11.         UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;//无硬件数据流控制
  12.         UART_InitStructure.UART_Mode = UART_Mode_Tx;        //发送模式
  13.         
  14.         UART_Init(UART1, &UART_InitStructure);                                                                 //初始化串口1
  15.         UART_Cmd(UART1, ENABLE);                                                            //使能串口1
  16.         
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                                 //UART1_TX   GPIOA.9
  18.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                //复用推挽输出
  20.         GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                //初始化GPIOA.9     
  21. }
复制代码



4、另外还要添加串口打印重定向函数,这个函数官方例程中已经写好了。
  1. int fputc(int ch, FILE *f)
  2. {      
  3.         while((UART1->CSR&UART_IT_TXIEN)==0);//循环发送,直到发送完毕   
  4.         UART1->TDR = (ch & (uint16_t)0x00FF);      
  5.         return ch;
  6. }
复制代码



5、串口程序测试。在主函数中对串口初始化程序进行调用,并将形参参数设置为“115200”即UART1波特率。将采集的温度数据以1.5s时间间隔利用“printf()”向串口打印;经串口高度助手软件在PC端进行显示:
  1. int main(void)
  2. {            
  3.         uart_initwBaudRate(115200);                         //串口初始化为115200
  4.         
  5.         printf("\r\n  新驱动力MM32F103C8T6\r");
  6.         printf("\r\n     UART1 TEST OK!\r\n");
  7.         
  8.         while(1)
  9.         {         
  10.         }   
  11. }
复制代码



6、ADC采集芯片内部温度传感器。MM32F103C8T6内部有两个ADC,分别为ADC1和ADC2。片内温度传感被连到了ADC1的通道8,如图:


7、对ADC1通道8进行相关设置。初始化函数中开启并使能ADC1通道8,采用单次采集模式。对于通道8采集温度传感器要对A/D配置寄存器(ADC_ADCFG)的“TVSEN”设置。包括ADC1通道8的数据采集函数例程中已有详细交待,这里就不贴了。



8、在主程序中,按照官方例程对采集的数据进行温度转换,不过这个公式与其它芯片所用的处理公式有区别,暂时还没有分析;
  1. int main(void)
  2. {            
  3.         delay_init();                                                                                                                                     //延时函数初始化        
  4.         uart_initwBaudRate(115200);                                                                                         //串口初始化为115200      
  5.         ADC1_SingleChannel(ADC_Channel_8);                                                         //配置ADC1为单次转换模式,通道8使能

  6.         while(1)
  7.         {
  8.                 if(ADC1_SingleChannel_Get(ADC_Channel_8, &GetTemp))
  9.                 {                          
  10.                         Temperate = (float)GetTemp*(3.32/4095);                                //电压值
  11.                         Temperate = (Temperate-1.5) / 0.00478 + 25;                //转换为温度值         
  12.                         printf("\r\n当前测得芯片内部温度为:%.2f℃\r\n",Temperate);
  13.                         delay_ms(1500);
  14.                 }
  15.         }   
  16. }
复制代码



三、实验结果。开发板上的“UART”端口通过数据线与PC端的USB口连接,经串口调试助手软件在PC端进行显示:


四、总结。利用官方提供的例程进行实验测试比较简单,但是官方提供的用户手册有些简单,并且还有一些错误。例如,在对手册ADC章节学习中发现P125的“11.6  外部触发转换 ”对“ADCFG寄存器的TRGEN位”描述有误,“TRGEN”位在控制寄存器(ADC_ADCR)的bit2。


另外,还有一处在数据手册P14的“2.2.23 温度传感器 ”中将连接在ADC1_IN8的温度传感器描述为“温度传感器在内部被连接到 ADC1_IN9的输入通道上”:


      同时也借此机会建议官方能将用户手册更加深入扩展,加入对库函数的说明。

此帖出自电机控制论坛

最新回复

不错   详情 回复 发表于 2019-10-18 14:31
点赞 关注
 
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

不错

此帖出自电机控制论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表