ADC采集的数据通过串口进行发送 (1)

1  RIDE串口调通

1  首先进行串口的测试,将《0403_ADC_UART_LED》文件夹里的程序注释掉所有的关于ADC的部分,仅对UART的部分进行分析与调试。

 

2  void SCU_Configuration(void)的配置

配置成关于UART0的时钟的使能。为什么是UART0而不是UART1或其它呢?见CJ-575的硬件配置

再对照着STR912FAW44查看GPIO口的分配,此处的GPIO口在Alternate Output3里给配置成的是UART0。因此,此处是使能UART1的时钟。

 

3 void GPIO_Configuration(void)中的配置

对应着原理图的ARM的引脚。P3.4 和 P3.2的口进行配置,P3.4作为TX,将GPIO的类型设为pushpull,对照着对照着STR912FAW44芯片手册查看GPIO口的分配表,(第二步图)可以查出,P3.4设成 GPIO_OutputAlt3, 将P3.2设成GPIO_OutputAlt1。并在主函数里将其置高,因为TX_EN是高电平使能。其余的同RIDE即可。

 

4  在main函数里写入简单的关于串口发送的测试数据,用于后续测试串口是否成功搭建环境。

 

5  流控改为none,流控对于全双工的232通信会阻碍 (此处我并不太清楚原理是为何)

 

6  开发板上的p3.4口经示波器检测无法发送数据,经查《STR91xFAxxx.pdf》的Device pin description后发现复用口p3.1和p3.4两个是UART0_Tx功能,改成p3.1口后,再将复用功能调为GPIO_OutputAlt2,即可发出数据来了。

 

7  设置Device的器件

 

8 板子实测时在Debug栏里选择J-LINK/J-TRACE ARM

 

9)) 在Utilities栏里取消勾选Use Debug Driver ,选择J-LINK/J-TRACE ARM,点击Settings。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于STC15W4K32S4单片机的通过串口发送ADC采集数据的代码,其中使用了ADC模块、UART模块和中断: ```c #include <STC15W4K32S4.H> #define FOSC 24000000L #define BAUD 9600L #define TIMER_1MS (65536-FOSC/1000) unsigned int ADC_value; unsigned char ADC_high, ADC_low; void ADC_Init(void); void UART_Init(void); void SendData(unsigned char dat); void SendADC(void); void main(void) { ADC_Init(); //初始化ADC UART_Init(); //初始化串口 EA = 1; //打开总中断 while(1) { ADC_CONTR = 0x88; //开始一次ADC转换 while(!(ADC_CONTR & 0x20)); //等待ADC转换完成 ADC_value = ADC_RES; //读取ADC转换结果 SendADC(); //发送ADC采集数据 } } void ADC_Init(void) { P1ASF = 0x01; //将P1.0设置为ADC输入口 ADC_RES = 0; //清除ADC转换结果寄存器 ADC_CONTR = 0x80; //ADC转换时钟为系统时钟的1/16 } void UART_Init(void) { SCON = 0x50; //8位数据位,可变波特率 TMOD &= 0x0F; //清除定时器1的控制位 TMOD |= 0x20; //定时器1工作在模式2,自动重载 TH1 = TL1 = TIMER_1MS; //设置定时器1初值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 } void SendData(unsigned char dat) { SBUF = dat; //将数据存入发送缓冲区 while(!TI); //等待发送完成 TI = 0; //清除发送标志位 } void SendADC(void) { ADC_high = ADC_value >> 8; //获取ADC采集数据高8位 ADC_low = ADC_value & 0xFF; //获取ADC采集数据低8位 SendData(ADC_high); //发送高8位数据 SendData(ADC_low); //发送低8位数据 } void UART_ISR(void) interrupt 4 { if(TI) //检测是否为发送中断 { TI = 0; //清除发送标志位 } if(RI) //检测是否为接收中断 { RI = 0; //清除接收标志位 } } ``` 这段代码实现了单片机通过ADC采集数据,并通过串口发送采集数据的功能。其中,ADC_Init()函数用于初始化ADCUART_Init()函数用于初始化串口,SendData()函数用于发送数据,SendADC()函数用于将ADC采集数据拆分为高8位和低8位分别发送。注意,在单片机中断服务函数中需要检测是否为发送或接收中断,分别清除标志位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值