int main(void) { //初始化系统时钟 使用外部50M晶振 PLL倍频到100M SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //初始化GUI GUI_Init(&CHGUI_InitStruct1); //设置背景色为黑色 GUI_SetBkColor(BLACK); //普通字符显示模式 GUI_SetTextMode(GUI_TEXTMODE_NORMAL); //设置前景色为红色 GUI_SetColor(LGRAY); //将当前字体设置为CourierNew GUI_SetFontFormName("FONT_CourierNew"); //打印字符 GUI_printf("HelloWorld\r\n"); //打印CHGUI版本号 GUI_printf("CHGUI_Version:%0.2f\r\n", (float)(GUI_VERSION/100)); //打印LCDID GUI_printf("ID:%X\r\n", GUI_GetDeivceID()); while(1) { } }
int main(void) { uint8_t last_sec; RTC_CalanderTypeDef RTC_Calander1; //初始化系统时钟 使用外部50M晶振 PLL倍频到100M SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); UART_printf("RTC TEST\r\n"); RTC_Init(); //可以设置时间 RTC_Calander1.Hour = 10; RTC_Calander1.Minute = 57; RTC_Calander1.Second = 58; RTC_Calander1.Month = 10; RTC_Calander1.Date = 10; RTC_Calander1.Year = 2013; //RTC_SetCalander(&RTC_Calander1); NVIC_EnableIRQ(RTC_IRQn); while(1) { RTC_GetCalander(&RTC_Calander1); //读取时间 if(last_sec != RTC_Calander1.Second) { UART_printf("%d-%d-%d %d:%d:%d\r\n", RTC_Calander1.Year, RTC_Calander1.Month, RTC_Calander1.Date, RTC_Calander1.Hour, RTC_Calander1.Minute, RTC_Calander1.Second); last_sec = RTC_Calander1.Second; } } }
int main(void) { //Clock Setup Internal Clock , CoreClock = 24M SystemClockSetup(ClockSource_IRC,CoreClock_24M); //DelayInit DelayInit(); //LED Init LED_Init(); //Init a debug UART prot // UART_DebugPortInit(UART1_RX_PC03_TX_PC04,115200); UART_DebugPortInit(UART0_RX_PB16_TX_PB17,115200); DisplayCPUInfo(); GPIO_Test(); MAG3110_Test(); AT24Cxx_Test(); SPIFLASH_Test(); ADC_Test(); WDOG_Init(); while(1); }
int main(void) { uint32_t LPTM_Value = 0; LPTM_InitTypeDef LPTM_InitStruct1; FTM_InitTypeDef FTM_InitStruct1; SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //在PC3上产生 1KHz 占空比50%的 方波 FTM_InitStruct1.Frequency = 1000; FTM_InitStruct1.FTMxMAP = FTM0_CH3_PC4; FTM_InitStruct1.FTM_Mode = FTM_Mode_EdgeAligned; FTM_InitStruct1.InitalDuty = 5000; FTM_Init(&FTM_InitStruct1); //开启PTC5上的脉冲计数引脚 LPTM_InitStruct1.LPTMxMap = LPTM_CH2_PC5; LPTM_InitStruct1.LPTM_InitCompareValue = 200; //在脉冲计数模式下无意义 LPTM_InitStruct1.LPTM_Mode = LPTM_Mode_PC_FALLING; //下降沿触发计数 LPTM_Init(&LPTM_InitStruct1); while(1) { //读取脉冲技术值 LPTM_Value = LPTM_GetTimerCounterValue(LPTMR0); //清空技术值 LPTM_ResetTimeCounter(LPTMR0); UART_printf("LPTMR:%dHz\r\n", LPTM_Value); DelayMs(1000); } }
void Data_Uart_Init(void) { DMA_InitTypeDef DMA_InitStruct1; UART_DebugPortInit(Data_UARTx_Map,DMAUART_BANDRATE); UART_ITConfig(Data_UARTx,UART_IT_TDRE,ENABLE); UART_DMACmd(Data_UARTx,UART_DMAReq_Tx,ENABLE); DMA_InitStruct1.Channelx = DMA_UART_CHx; //使用DMA0通道 (0-15) DMA_InitStruct1.DMAAutoClose = ENABLE; //传输完毕后自动关闭 DMA_InitStruct1.EnableState = ENABLE; //初始化后不立即开始传输 DMA_InitStruct1.MinorLoopLength = Data_All_Length; //传输次数 DMA_InitStruct1.PeripheralDMAReq = UARTx_TRAN_DMAREQ; //UART 传输完成触发 DMA_InitStruct1.TransferBytes = 1; //每次传输一个字节 //配置目的地址传输参数 DMA_InitStruct1.DestBaseAddr = (uint32_t)DMA_UART_TX_DB; //指向目的地址 DMA_InitStruct1.DestDataSize = DMA_DST_8BIT; //数组为1Byte DMA_InitStruct1.DestMajorInc = 0; //执行一次大循环后 地址不增加 DMA_InitStruct1.DestMinorInc = 0; //每次传输完地址不增加 //配置源地址传输参数 DMA_InitStruct1.SourceBaseAddr = (uint32_t)DMA_UART_TX_SB; DMA_InitStruct1.SourceDataSize = DMA_SRC_8BIT; DMA_InitStruct1.SourceMajorInc = 0; DMA_InitStruct1.SourceMinorInc = 1; DMA_Init(&DMA_InitStruct1); //DMA_ITConfig(DMA0,DMA_IT_MAJOR,DMA_CH5,ENABLE);不启动DMA5中断服务函数 //NVIC_EnableIRQ(DMA5_IRQn); }
int main(void) { SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); GUI_Init(&CHGUI_InitStruct1); GUI_SetFontFormName("FONT_CourierNew"); while(1) { GUI_GotoXY(0, 0); GUI_TOUCH_GetState(&State); //打印物理AD坐标 GUI_printf("Phy:X:%04d Y:%04d\r\n", GUI_TOUCH_GetxPhys(), GUI_TOUCH_GetyPhys()); //打印逻辑AD坐标 GUI_printf("Log:X:%04d Y:%04d\r\n", State.x, State.y); GUI_printf("State:%01d\r\n", State.Pressed); //LCD 画笔跟踪 GUI_DrawPoint(State.x, State.y); DelayMs(10); //GUI 触摸屏处理函数 每10MS调用一次 GUI_TOUCH_Exec(); } }
int main(void) { //使用USB 必须CoreClock = 96M uint8_t FnKey = 0; uint8_t Keybuf[6] = {0,0,0,0,0,0}; SystemClockSetup(ClockSource_EX50M,CoreClock_96M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); KBI_Init(KBI_PinLookup_CHK60EVB, kNumOfKEY); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); UART_printf("Waitting for USB connect ...\r\n"); USB_Init(); //初始化USB设备 USB_WaitDeviceEnumed(); //等待USB枚举成功 UART_printf("USB connected!\r\n"); while(1) { KBI_Scan(); if(KBI_GetKeyState(kKEY1) == kKBI_SINGLE) { Keybuf[0] = 4; //A 的USBHIDKeyCode USB_HID_SetKeyBoard(FnKey,Keybuf); } if(KBI_GetKeyState(kKEY2) == kKBI_SINGLE) { Keybuf[0] = 5; //A 的USBHIDKeyCode USB_HID_SetKeyBoard(FnKey,Keybuf); } HID_Proc(); //执行HID进程 DelayMs(KBI_SCAN_PERIOD_IN_US/1000); //延时 } }
int main(void) { //使用USB 必须CoreClock = 96M uint8_t usb_hid_send_buf[8] ={0,0,0,0,0,0}; uint8_t usb_hid_rec_buf[8]; uint8_t usb_hid_rec_cnt = 0; //接收帧计数 SystemClockSetup(ClockSource_EX50M,CoreClock_96M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); KBI_Init(KBI_PinLookup_CHK60EVB, kNumOfKEY); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); UART_printf("Waitting for USB connect ...\r\n"); USB_Init(); //初始化USB设备 USB_WaitDeviceEnumed(); //等待USB枚举成功 UART_printf("USB connected!\r\n"); while(1) { KBI_Scan(); usb_hid_send_buf[0] = KBI_GetKeyValue(kKEY1); usb_hid_send_buf[1] = KBI_GetKeyValue(kKEY2); USB_HID_SendData(usb_hid_send_buf,8); //发送数据 if(USB_HID_RecData(usb_hid_rec_buf) != 0) //接收到了数据 { LED_Ctrl(kLED1, (usb_hid_rec_buf[0]&0x01)>>0); LED_Ctrl(kLED2, (usb_hid_rec_buf[0]&0x02)>>1); usb_hid_rec_cnt++; UART_printf("USB HID Data Received\r\n"); } HID_Proc(); //执行HID进程 DelayMs(KBI_SCAN_PERIOD_IN_US/1000); //延时 }
int main(void) { uint8_t i; uint32_t cnt = 0; CAN_InitTypeDef CAN_InitStruct1; //使用CAN时 CoreClock 必须是96M SystemClockSetup(ClockSource_EX50M,CoreClock_96M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //配置CAN初始化信息 CAN_InitStruct1.CANxMap = CAN1_TX_PE24_RX_PE25; //PE24 PE25引脚 CAN_InitStruct1.CAN_BaudRateSelect = CAN_SPEED_125K; //125K 波特率 CAN_InitStruct1.FilterEnable = ENABLE; //不使用过滤ID功能 CAN_Init(&CAN_InitStruct1); //配置接收信息 CAN_RxMsg1.MBIndex = CAN_MB1; //接收邮箱使用CAN_MB1 CAN_RxMsg1.DLC = 8; //最多接收8个字节 一帧 CAN_RxMsg1.Id = 7; //接收ID CAN_EnableReceiveMB(CAN1, &CAN_RxMsg1); //使能接收邮箱 //配置发送数据 CAN_TxMsg1.Id = 10; //发送ID 10 CAN_TxMsg1.DLC = 8; //每帧8字节 CAN_TxMsg1.IDE = CAN_IDE_Standard; //标准数据帧 CAN_TxMsg1.RTR = CAN_RTR_Data; //数据帧 CAN_TxMsg1.MBIndex = CAN_MB2; //使用邮箱0 //写入测试数据 memcpy(CAN_TxMsg1.Data, "12345678", CAN_TxMsg1.DLC); while(1) { if (CAN_Receive(CAN1, &CAN_RxMsg1) == TRUE) { //如果接收成功 打印接收数据 UART_printf("ID:0x%x\r\n",CAN_RxMsg1.Id); UART_printf("Data: "); for(i = 0; i < CAN_RxMsg1.DLC; i++) { UART_printf("0x%x ", CAN_RxMsg1.Data[i]); } UART_printf("\r\n"); } cnt++; //发送 if(cnt == 1000000) { CAN_Transmit(CAN1, &CAN_TxMsg1); cnt = 0; } } }
int main(void) { uint32_t counter; NRF2401_InitTypeDef NRF2401_InitStruct1; SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHKATOM, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //配置2401引脚 NRF2401_InitStruct1.CE_GPIO_Instance = PTA_BASE; //CE NRF2401_InitStruct1.CE_GPIO_Pin = GPIO_Pin_13; NRF2401_InitStruct1.CS_GPIO_Instance = PTA_BASE; //CS NRF2401_InitStruct1.CS_GPIO_Pin = GPIO_Pin_14; NRF2401_InitStruct1.IRQ_GPIO_Instance = PTA_BASE; //IRQ NRF2401_InitStruct1.IRQ_GPIO_Pin = GPIO_Pin_12; NRF2401_InitStruct1.DATA_SPI_CSMap = SPI0_PCS0_PA14; //SPI NRF2401_InitStruct1.DATA_SPI_DataMap = SPI0_SCK_PA15_SOUT_PA16_SIN_PA17; NRF2401_Init(&NRF2401_InitStruct1); if(NRF24L01_Check() != NRF_OK) { UART_printf("NRF2401 init failed\r\n"); return 1; } //先设置为接收模式 NRF2401_SetRXMode(); while(1) { if(counter > 20000) { NRF2401_SetTXMode(); //设置为发送模式 if(NRF2401_SendData("NRF2401 Test CHK60EVB!") == TX_OK) { UART_printf("Send Succ.\r\n"); } else { UART_printf("Send Failed\r\n"); } NRF2401_SetRXMode(); //设置为接收模式 counter = 0; } counter++; if(NRF2401_RecData(NRF2401RXBuffer) == NRF_OK) //接收到了数据 { UART_printf("DataRec:%s\r\n",NRF2401RXBuffer); //打印数据 } } }
int main(void) { SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHKATOM, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); uCOS_SysTickInit(); OSInit(); //OS初始化 OSTaskCreate(AppStartTask,(void *)0, &APP_START_STK[TASK_STK_SIZE-1], APP_START_TASK_PRIO); //建立LED1任务 OSStart(); //控制权交给操作系统 //程序永远不会运行到这 }
int main(void) { SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //初始化SPIFlash SPI_FLASH_Init(); UART_printf("SPI Flash Size:%dKB\r\n", SPI_FLASH_GetCapacity()/1024); //测试SPIFLASH SPIFLASH_Test(); while(1) { } }
int main(void) { SD_InitTypeDef SD_InitStruct1; SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); UART_printf("Please Insert Card\r\n"); SD_InitStruct1.SD_BaudRate = 2000000; //等待SD卡初始化成功 while(SD_Init(&SD_InitStruct1) != ESDHC_OK); UART_printf("SD Size:%dMB\r\n", SD_InitStruct1.SD_Size); while(1) { } }
int main(void) { uint32_t ADC_Value = 0; ADC_InitTypeDef ADC_InitStruct1; //初始化系统时钟 使用外部50M晶振 PLL倍频到100M SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHKATOM, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //初始化ADC ADC_InitStruct1.ADCxMap = ADC0_SE13_PB3; //PC0 引脚作为ADC0 14通道 ADC_InitStruct1.ADC_Precision = ADC_PRECISION_10BIT; //10位精度 ADC_InitStruct1.ADC_TriggerSelect = ADC_TRIGGER_SW; //软件触发(A 通道可使用软/硬件触发 B 通道只能使用硬件触发) ADC_Init(&ADC_InitStruct1); while(1) { ADC_Value = ADC_GetConversionValue(ADC0_SE13_PB3); //获得AD转换值 UART_printf("ADC0_SE13_PB3:%d\r\n",ADC_Value); DelayMs(300); } }
int main(void) { uint32_t ADC_Value = 0; ADC_InitTypeDef ADC_InitStruct1; //初始化系统时钟 使用外部50M晶振 PLL倍频到100M SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHK60EVB, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //初始化ADC ADC_InitStruct1.ADCxMap = ADC0_SE20_DM1; //DM1 引脚作为ADC0 20通道(SE单端模式) ADC_InitStruct1.ADC_Precision = ADC_PRECISION_10BIT; //10位精度 ADC_InitStruct1.ADC_TriggerSelect = ADC_TRIGGER_SW; //软件触发(A 通道可使用软/硬件触发 B 通道只能使用硬件触发) ADC_InitStruct1.ADC_ClkDiv = ADC_CLKDIV_1; //ADC转换时钟为总线时钟/8 时钟越慢转换速度越慢 精度越高 ADC_Init(&ADC_InitStruct1); while(1) { ADC_Value = ADC_GetConversionValue(ADC0_SE20_DM1); //获得AD转换值 UART_printf("ADC0_SE20_DM1:%d\r\n",ADC_Value); DelayMs(300); } }
int main(void) { DMA_InitTypeDef DMA_InitStruct1; SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHKATOM, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //开启UART 发送中断/DMA功能 UART_ITConfig(UART4,UART_IT_TDRE,ENABLE); //使能UART4 TX DMA发送 UART_DMACmd(UART4,UART_DMAReq_Tx,ENABLE); DMA_InitStruct1.Channelx = DMA_CH0; //使用DMA0通道 (0-15) DMA_InitStruct1.DMAAutoClose = ENABLE; //传输完毕后自动关闭 DMA_InitStruct1.EnableState = ENABLE; //初始化后立即开始传输 DMA_InitStruct1.MinorLoopLength = sizeof(UARTSendBuffer); //传输次数 DMA_InitStruct1.PeripheralDMAReq = UART4_TRAN_DMAREQ; //UART 传输完成触发 DMA_InitStruct1.TransferBytes = 1; //每次传输一个字节 //配置目的地址传输参数 DMA_InitStruct1.DestBaseAddr = (uint32_t)&(UART4->D); //指向目的地址 DMA_InitStruct1.DestDataSize = DMA_DST_8BIT; //数组为1Byte DMA_InitStruct1.DestMajorInc = 0; //执行一次大循环后 地址不增加 DMA_InitStruct1.DestMinorInc = 0; //每次传输完地址不增加 //配置源地址传输参数 DMA_InitStruct1.SourceBaseAddr = (uint32_t)UARTSendBuffer; DMA_InitStruct1.SourceDataSize = DMA_SRC_8BIT; DMA_InitStruct1.SourceMajorInc = 0; DMA_InitStruct1.SourceMinorInc = 1; //每次传输1个字节后地址自动加1 将后面的数据继续发送 DMA_Init(&DMA_InitStruct1); //等待传输完成 while(DMA_IsComplete(DMA_CH0) == FALSE); while(1) { } }
int main(void) { unsigned char i; unsigned char Send_Count; uint32_t DMA_Value0 = 0; uint32_t DMA_Value1 = 0; PIT_InitTypeDef PIT_InitStruct1; GPIO_InitTypeDef GPIO_InitStruct1; FTM_InitTypeDef FTM_InitStruct1; DMACNT_InitTypeDef DMACNT_InitStruct1; SystemClockSetup(ClockSource_EX50M,CoreClock_100M); UART_DebugPortInit(UART0_RX_PA14_TX_PA15,115200); DisplayCPUInfo(); DelayInit(); OLED_Init(); DMACNT_InitStruct1.DMACNT_Mode = DMACNT_MODE_FALLING; //ÉÏÉýÑؼÆÊý DMACNT_InitStruct1.DMA_Chl = DMA_CH0; //ʹÓÃͨµÀ 0 DMACNT_InitStruct1.GPIOx = PTC; //PTC5 DMACNT_InitStruct1.GPIO_Pin = GPIO_Pin_5; DMACNT_Init(&DMACNT_InitStruct1); GPIO_InitStruct1.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct1.GPIO_InitState = Bit_RESET; GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DISABLE; GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_OPP; GPIO_InitStruct1.GPIOx = PTB; GPIO_Init(&GPIO_InitStruct1); GPIO_InitStruct1.GPIO_Pin = GPIO_Pin_1; GPIO_InitStruct1.GPIO_InitState = Bit_SET; GPIO_InitStruct1.GPIOx = PTB; GPIO_Init(&GPIO_InitStruct1); PIT_InitStruct1.PITx=PIT2; PIT_InitStruct1.PIT_Interval=100; PIT_Init(&PIT_InitStruct1); NVIC_EnableIRQ(PIT2_IRQn); PIT_ITConfig(PIT2,PIT_IT_TIF,ENABLE); PIT_InitStruct1.PITx=PIT0; PIT_InitStruct1.PIT_Interval=20000; PIT_Init(&PIT_InitStruct1); PIT_ITConfig(PIT0,PIT_IT_TIF,ENABLE); NVIC_EnableIRQ(PIT0_IRQn); FTM_InitStruct1.Frequency = 800; FTM_InitStruct1.FTM_Mode = FTM_Mode_EdgeAligned; // FTM_InitStruct1.InitalDuty = 10000; FTM_InitStruct1.FTMxMAP = FTM0_CH0_PC1; FTM_Init(&FTM_InitStruct1); UART_printf("DMACNT_CH0_Value:%d \n",*Pid_Out); while(1) { // if(key_detect1()){ // Pid_Set += 500; // } // if(key_detect3()){ // Pid_Set -= 500; // } GPIO_ResetBits(PTB,GPIO_Pin_0); PidError[2] = Pid_Set - *Pid_Out; PidOut = Kp * (PidError[2] - PidError[1]); PidOut += Ki * PidError[2] * Td; PidOut += Kd * (PidError[2] - 2 * PidError[1] + PidError[0]) / Td; PidError[0] = PidError[1]; PidError[1] = PidError[2]; PID_FinalOut =PidOut*2; // // if(key_detect5()){ // Kd+=0.2;OLED_Clear(); // } // else if(key_detect6()){ // Kd-=0.2;OLED_Clear(); // } // // OLED_Write_String(2,0,"Kp"); // OLED_Write_String(2,2,"Ki"); // OLED_Write_String(2,4,"Kd"); // OLED_Write_Num3(6,0,Kp*10); // OLED_Write_Num3(6,2,Ki*10); // OLED_Write_Num3(6,4,Kd*10); // OLED_Write_Num4(9,6,*Pid_Out-1000); // if(PID_FinalOut>10000) PID_FinalOut=10000; else if(PID_FinalOut<0) PID_FinalOut=0; FTM_PWM_ChangeDuty(FTM0_CH0_PC1,PID_FinalOut); } }
int main(void) { float cnt = 0; uint32_t i; uint8_t res; SD_InitTypeDef SD_InitStruct1; SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHKATOM, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); UART_printf("Please Insert Card\r\n"); SD_InitStruct1.SD_BaudRate = 2000000; //等待SD卡初始化成功 while(SD_Init(&SD_InitStruct1) != ESDHC_OK); //初始化FAT32 znFAT_Device_Init(); //设备初始化 znFAT_Select_Device(0,&initArgSD); //选择SD卡设备 res = znFAT_Init(); if(res == ERR_SUCC) { UART_printf("Suc. to init FS\r\n"); UART_printf("BPB_Sector_No:%d\r\n",initArgSD.BPB_Sector_No); UART_printf("Total_SizeKB:%d\r\n",initArgSD.Total_SizeKB); UART_printf("BytesPerSector:%d\r\n",initArgSD.BytesPerSector); UART_printf("FATsectors:%d\r\n",initArgSD.FATsectors); UART_printf("SectorsPerClust:%d\r\n",initArgSD.SectorsPerClust); UART_printf("FirstFATSector:%d\r\n",initArgSD.FirstFATSector); UART_printf("FirstDirSector:%d\r\n",initArgSD.FirstDirSector); UART_printf("FSsec:%d\r\n",initArgSD.FSINFO_Sec); UART_printf("Next_Free_Cluster:%d\r\n",initArgSD.Next_Free_Cluster); UART_printf("FreenCluster:%d\r\n",initArgSD.Free_nCluster); } else { UART_printf("FAT32 Init failed CODE:%d",res); while(1); } res = znFAT_Delete_File("/RECORD/record.csv"); if(res != ERR_SUCC) { UART_printf("File delate failed!, CODE:%d\r\n",res); } else { UART_printf("/RECORD/record.csv deleted succ.\r\n"); } UART_printf("Creating Dir..."); res = znFAT_Create_Dir("/RECORD/",&dtInfo1); //创建目录 if((res != ERR_SUCC) && (res != ERR_DIR_ALREADY_EXISTING)) { UART_printf("Fail CODE:%d\r\n",res); while(1); } UART_printf("Creating Files..."); res = znFAT_Create_File(&fileInfo1,"/RECORD/record.csv",&dtInfo1); //创建文件 文件名尽量使用8.3短文件名 if(res != ERR_SUCC) { UART_printf("Failed CODE:%d\r\n",res); while(1); } UART_printf("Writing data...\r\n"); znFAT_WriteData(&fileInfo1,sizeof(TextTitle),(unsigned char *)TextTitle); //打印表头 //写入数据 for(cnt=0; cnt<(2*PI); cnt+=0.05) { i++; sprintf((char *)recordBuffer,"%d,%1.3f,%1.3f\r\n",i,sin(cnt),cos(cnt)); //写入sin cos UART_printf((char *)recordBuffer); znFAT_WriteData(&fileInfo1,strlen((char *)recordBuffer),(unsigned char *)recordBuffer); } UART_printf("Writing Completed please see CSV file on PC!\r\n"); znFAT_Close_File(&fileInfo1); //打开一个文件后,必须关闭 znFAT_Flush_FS(); //必须刷新系统使文件生效 while(1) { } }