/* ************************************************************************* * 包含的头文件 ************************************************************************* */ /* STM32 固件库头文件 */ #include "stm32f10x.h" /* 开发板硬件bsp头文件 */ #include "board.h" #include "bsp_ili9341_lcd.h" #include "bsp_adc.h" #include "bsp_TiMbase.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(); BASIC_TIM_Init(); //其中0、3、5、6 模式适合从左至右显示文字, //不推荐使用其它模式显示文字 其它模式显示文字会有镜像效果 //其中 6 模式为大部分液晶例程的默认显示方向 ILI9341_GramScan ( 3 ); LCD_SetColors(WHITE, BLACK); ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); //绘制波形显示区域框和背景虚线 PlotBlackground(); ILI9341_DispString_EN(240, (((sFONT *)LCD_GetFont())->Height)*0, "->"); char dispBuff[100]; /*使用c标准库把变量转化成字符串*/ sprintf(dispBuff,"TV: %d", CurTriggerValue); ILI9341_DispString_EN(260, (((sFONT *)LCD_GetFont())->Height)*0, dispBuff); ILI9341_DispString_EN(260, (((sFONT *)LCD_GetFont())->Height)*1, CurRangeMode); ILI9341_DispString_EN(260, (((sFONT *)LCD_GetFont())->Height)*2, CurTriggerMode); ILI9341_DispString_EN(260, (((sFONT *)LCD_GetFont())->Height)*3, CurTriggerMode); sprintf(dispBuff,"TPD: %d", CurTimePerDiv); ILI9341_DispString_EN(260, (((sFONT *)LCD_GetFont())->Height)*4, dispBuff); /* 调用组件初始化函数 (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(); }