单片机 :STM32F407
开发板:DMF407电机开发板
平台:keil V5.31
HSE 为8MHZ
HSI为16MHZ
主函数:
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
delay_init(168); /* 延时初始化 */
usart_init(115200); /* 串口初始化为115200 */
led_init(); /* 初始化LED */
lcd_init(); /* 初始化LCD */
key_init(); /* 初始化按键 */
my_mem_init(SRAMIN); /* 初始化内部SRAM内存池 */
my_mem_init(SRAMCCM); /* 初始化内部SRAMCCM内存池 */
uc_os3_demo(); /* 运行uC/OS-III例程 */
}
ucos3:
void uc_os3_demo(void)
{
OS_ERR err;
lcd_show_string(10, 10, 220, 32, 32, "STM32", RED);
lcd_show_string(10, 47, 220, 24, 24, "uC/OS-III Porting", RED);
lcd_show_string(10, 76, 220, 16, 16, "ATOM@ALIENTEK", RED);
/* 初始化uC/OS-III */
OSInit(&err);
/* 创建Start Task */
OSTaskCreate( (OS_TCB *)&StartTask_TCB,
(CPU_CHAR *)"start_task",
(OS_TASK_PTR )start_task,
(void *)0,
(OS_PRIO )START_TASK_PRIO,
(CPU_STK *)StartTask_STK,
(CPU_STK_SIZE )START_STK_SIZE / 10,
(CPU_STK_SIZE )START_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
/* 开始任务调度 */
OSStart(&err);
for (;;)
{
/* 不会进入这里 */
}
}
task
void start_task(void *p_arg)
{
OS_ERR err;
CPU_INT32U cnts;
/* 初始化CPU库 */
CPU_Init();
/* 根据配置的节拍频率配置SysTick */
cnts = (CPU_INT32U)(HAL_RCC_GetSysClockFreq() / OSCfg_TickRate_Hz);
OS_CPU_SysTickInit(cnts);
/* 开启时间片调度,时间片设为默认值 */
OSSchedRoundRobinCfg(OS_TRUE, 0, &err);
/* 创建Task1 */
Task1Task_STK = (CPU_STK *)mymalloc(SRAMIN, TASK1_STK_SIZE * sizeof(CPU_STK));
OSTaskCreate( (OS_TCB *)&Task1Task_TCB,
(CPU_CHAR *)"task1",
(OS_TASK_PTR )task1,
(void *)0,
(OS_PRIO )TASK1_PRIO,
(CPU_STK *)Task1Task_STK,
(CPU_STK_SIZE )TASK1_STK_SIZE / 10,
(CPU_STK_SIZE )TASK1_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
/* 创建Task2 */
Task2Task_STK = (CPU_STK *)mymalloc(SRAMIN, TASK2_STK_SIZE * sizeof(CPU_STK));
OSTaskCreate( (OS_TCB *)&Task2Task_TCB,
(CPU_CHAR *)"task2",
(OS_TASK_PTR )task2,
(void *)0,
(OS_PRIO )TASK2_PRIO,
(CPU_STK *)Task2Task_STK,
(CPU_STK_SIZE )TASK2_STK_SIZE / 10,
(CPU_STK_SIZE )TASK2_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
/* 删除Start Task */
OSTaskDel((OS_TCB *)0, &err);
}
void task1(void *p_arg)
{
uint32_t task1_num = 0;
OS_ERR err;
while(1)
{
lcd_clear(lcd_discolor[++task1_num % 14]); /* 刷新屏幕 */
lcd_show_string(10, 10, 220, 32, 32, "STM32", RED);
lcd_show_string(10, 47, 220, 24, 24, "uC/OS-III Porting", RED);
lcd_show_string(10, 76, 220, 16, 16, "ATOM@ALIENTEK", RED);
LED0_TOGGLE(); /* LED0闪烁 */
OSTimeDly(1000, OS_OPT_TIME_DLY, &err); /* 延时1000ticks */
}
}
void task2(void *p_arg)
{
float float_num = 0.0;
OS_ERR err;
while(1)
{
float_num += 0.01f; /* 更新数值 */
printf("float_num: %0.4f\r\n", float_num); /* 打印数值 */
OSTimeDly(1000, OS_OPT_TIME_DLY, &err); /* 延时1000ticks */
}
}
测试结果:

