首先附上图
这个呢就是能看到的串口打印
“八月,新唐你好”
“Hello,21ic.com!”
下面是打印输出的ADC采集的数据。
然后是使用的板子,板子是NUC131板子。
下面附上代码 :
程序很简单。只是用了简单的UART发送,以及ADC采集。
打印文字的时候,将需要打印的文字利用Printf输出。
输出ADC数据的时候就用简单的串口输出数据即可。
例程都是NUC131BSP里面的例程,只进行了数据的处理和简单的修改。
程序大致步骤是时钟设置——串口初始化——ADC初始化——数据处理。
ADC采集数据是用了定时器来进行开启的。
希望大家共同学习共同进步。
小小例程仅供参考。
#include <stdio.h>
#include "NUC131.h"
#define PLL_CLOCK 50000000
#define RXBUFSIZE 1024
#define ADC_BUFFER_LONG 64
#define COM_BUFFER_LONG 256
struct ADC_DATA{
int16_t Buffer[6][ADC_BUFFER_LONG];
uint8_t Count[6];
uint8_t Start_Conv;
uint8_t Conv_Finish;
}ADC_Data;
struct COM_DATA{
uint8_t Buffer[COM_BUFFER_LONG];
uint8_t Rece_Count;
uint8_t Send_Long;
uint8_t Send_Mack;
uint8_t Send_Count;
}COM_Data;
struct SYS_TIME{
uint16_t Time_1s_count;
}SYS_Time;
uint8_t g_u8RecData[RXBUFSIZE] = {0};
volatile uint32_t g_u32comRbytes = 0;
volatile uint32_t g_u32comRhead = 0;
volatile uint32_t g_u32comRtail = 0;
volatile int32_t g_bWait = TRUE;
int32_t main(void);
void UART_TEST_HANDLE(void);
void UART_FunctionTest(void);
void ADC_Init(void);
void ADC_DATA_Send_Pro(void);
void SYS_Init(void)
{
CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));
CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);
CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);
CLK_SetCoreClock(PLL_CLOCK);
CLK_EnableModuleClock(UART0_MODULE);
CLK_EnableModuleClock(TMR0_MODULE);
CLK_EnableModuleClock(ADC_MODULE);
CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));
CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, 0);
CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));
SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;
SYS->GPA_MFP |= SYS_GPA_MFP_PA0_ADC0;
}
void UART0_Init()
{
SYS_ResetModule(UART0_RST);
UART_Open(UART0, 9600);
}
void ADC_Init(void)
{
ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_SINGLE_CYCLE, BIT0);
ADC_POWER_ON(ADC);
ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
ADC_START_CONV(ADC);
}
int main(void)
{
SYS_UnlockReg();
SYS_Init();
/* Lock protected registers */
SYS_LockReg();
/* Init UART0 for printf and testing */
UART0_Init();
TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 3200);
TIMER_EnableInt(TIMER0);
NVIC_EnableIRQ(TMR0_IRQn);
TIMER_Start(TIMER0);
ADC_Init();
GPIO_SetMode(PB, BIT13, GPIO_PMD_OUTPUT);
/* UART sample function */
// printf(“八月,新唐你好!");
// printf("Hello, 21ic.com !");
// printf("ADC test:");
// printf("MyID:5574293");
UART_FunctionTest();
while(1);
}
void TMR0_IRQHandler(void)
{
if(TIMER_GetIntFlag(TIMER0) == 1)
{
TIMER_ClearIntFlag(TIMER0);
if(ADC_Data.Start_Conv){
ADC_Data.Buffer[0][ADC_Data.Count[0]++] = ADC_GET_CONVERSION_DATA(ADC, 0);;
ADC_START_CONV(ADC);
if(ADC_Data.Count[0]>=ADC_BUFFER_LONG){
ADC_Data.Start_Conv = 0;
ADC_Data.Conv_Finish = 1;
ADC_DATA_Send_Pro();
}
}
if(SYS_Time.Time_1s_count < 3200) SYS_Time.Time_1s_count++;
else {
SYS_Time.Time_1s_count = 0;
ADC_Data.Start_Conv = 1;
ADC_Data.Count[0] = 0;
ADC_START_CONV(ADC);
}
}
}
void ADC_DATA_Send_Pro(void)
{
uint8_t Temp_i;
for(Temp_i = 0; Temp_i < ADC_BUFFER_LONG;Temp_i ++ )
{
COM_Data.Buffer[Temp_i*2+0] = (uint8_t)(ADC_Data.Buffer[0][Temp_i] >> 8);
}
COM_Data.Send_Long = 128;
COM_Data.Send_Mack = 1;
}
void UART02_IRQHandler(void)
{
UART_TEST_HANDLE();
}
void UART_TEST_HANDLE()
{
uint32_t u32IntSts = UART0->ISR;
if(u32IntSts & UART_ISR_RDA_INT_Msk)
{
while(UART_IS_RX_READY(UART0))
{
COM_Data.Buffer[COM_Data.Rece_Count++] = UART_READ(UART0);
}
if(COM_Data.Buffer[0] == 0x01 )
{
uint8_t Temp_i;
for(Temp_i = 0; Temp_i < ADC_BUFFER_LONG;Temp_i ++ )
{
COM_Data.Buffer[Temp_i*2+0] = (uint8_t)(ADC_Data.Buffer[0][Temp_i] >> 8);
}
COM_Data.Send_Long = 128;
}
}
if(COM_Data.Send_Mack){
if(COM_Data.Send_Long>COM_Data.Send_Count){
UART_WRITE(UART0, COM_Data.Buffer[COM_Data.Send_Count]);
}else {
COM_Data.Send_Mack = 0;
}
}
}
void UART_FunctionTest()
{
UART_EnableInt(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk | UART_IER_TOUT_IEN_Msk));
while(g_bWait);
UART_DisableInt(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk | UART_IER_TOUT_IEN_Msk));
g_bWait = TRUE;
}
|