/* ************************************************************************* * 包含的头文件 ************************************************************************* */ /* STM32 固件库头文件 */ #include "stm32f10x.h" /* 开发板硬件bsp头文件 */ #include "board.h" #include "bsp_ili9341_lcd.h" #include "bsp_adc.h" #include "delay.h" #include "bsp_led.h" #include "bsp_usart.h" #include "bsp_key_exti.h" #include "bsp_PS2.h" #include "OSC.h" /* RT-Thread相关头文件 */ #include #include #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) #define RT_HEAP_SIZE 1024 /* 从内部SRAM里面分配一部分静态内存来作为rtt的堆空间,这里配置为4KB */ static uint32_t rt_heap[RT_HEAP_SIZE]; RT_WEAK void *rt_heap_begin_get(void) { return rt_heap; } RT_WEAK void *rt_heap_end_get(void) { return rt_heap + RT_HEAP_SIZE; } #endif /** * @brief 开发板硬件初始化函数 * @param 无 * @retval 无 * * @attention * RTT把开发板相关的初始化函数统一放到board.c文件中实现, * 当然,你想把这些函数统一放到main.c文件也是可以的。 */ void rt_hw_board_init() { /* 初始化SysTick */ SysTick_Config( SystemCoreClock / RT_TICK_PER_SECOND ); /* 硬件BSP初始化统统放在这里,比如LED,串口,LCD等 */ ILI9341_Init ();//LCD 初始化 LED_GPIO_Config(); USART_Config(); ADCx_Init(); EXTI_Key_Config(); PS2_Key_Config(); //其中0、3、5、6 模式适合从左至右显示文字, //不推荐使用其它模式显示文字 其它模式显示文字会有镜像效果 //其中 6 模式为大部分液晶例程的默认显示方向 ILI9341_GramScan ( 3 ); LCD_SetColors(WHITE, BLACK); ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); //绘制波形显示区域框和背景虚线 PlotBlackground(); char dispBuff[100]; uint8_t StartPos_X=10, StartPos_Y=7, Div=50; ILI9341_Clear(0, 0, 320, 30); sprintf(dispBuff,"%.1fkHz", CurWaveFrq); ILI9341_DispString_EN(Div*0+StartPos_X, StartPos_Y, dispBuff); /*使用c标准库把变量转化成字符串*/ sprintf(dispBuff,"%.1fV", CurTriggerValue); ILI9341_DispString_EN(Div*1+StartPos_X+10, StartPos_Y, dispBuff); ILI9341_DispString_EN(Div*2+StartPos_X+15, StartPos_Y, CurTriggerMode); ILI9341_DispString_EN(Div*3+StartPos_X, StartPos_Y, CurSamplingMode); sprintf(dispBuff,"%dms", CurTimePerDiv); ILI9341_DispString_EN(Div*4+StartPos_X, StartPos_Y, dispBuff); ILI9341_DispString_EN(Div*5+StartPos_X, StartPos_Y, CurSamplStatus); /* 调用组件初始化函数 (use INIT_BOARD_EXPORT()) */ #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE) rt_console_set_device(RT_CONSOLE_DEVICE_NAME); #endif #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get()); #endif } /** * @brief SysTick中断服务函数 * @param 无 * @retval 无 * * @attention * SysTick中断服务函数在固件库文件stm32f10x_it.c中也定义了,而现在 * 在board.c中又定义一次,那么编译的时候会出现重复定义的错误,解决 * 方法是可以把stm32f10x_it.c中的注释或者删除即可。 */ void SysTick_Handler(void) { /* 进入中断 */ rt_interrupt_enter(); /* 更新时基 */ rt_tick_increase(); /* 离开中断 */ rt_interrupt_leave(); } /** * @brief 重映射串口DEBUG_USARTx到rt_kprintf()函数 * Note:DEBUG_USARTx是在bsp_usart.h中定义的宏,默认使用串口1 * @param str:要输出到串口的字符串 * @retval 无 * * @attention * */ void rt_hw_console_output(const char *str) { /* 进入临界段 */ rt_enter_critical(); /* 直到字符串结束 */ while (*str!='\0') { /* 换行 */ if (*str=='\n') { USART_SendData(DEBUG_USARTx, '\r'); while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET); } USART_SendData(DEBUG_USARTx, *str++); while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET); } /* 退出临界段 */ rt_exit_critical(); }