Skip to content

Commit be73bdc

Browse files
committed
攒了十几天的大量更新,详见Release
1 parent d5885e8 commit be73bdc

File tree

444 files changed

+166836
-2259
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

444 files changed

+166836
-2259
lines changed

STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfig.c

Lines changed: 217 additions & 75 deletions
Large diffs are not rendered by default.

STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfigCore.c

Lines changed: 177 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ void sys_MCU_Init_Seq(void)
6363
#if SYSTEM_CRC_ENABLE
6464
sys_CRC_ENABLE();
6565
if(HAL_CRC_Accumulate(&hcrc, (uint32_t *)aDataBuffer, BUFFER_SIZE) == uwExpectedCRCValue)
66-
{}else{FaultASSERT("AT : CRC init");}
66+
{}else{FaultASSERT("CRC init",1,flag_Warning);}
6767
#endif
6868

6969
#if SYSTEM_RNG_ENABLE
@@ -131,6 +131,8 @@ void sys_MCU_Init_Seq(void)
131131
/*__________器件外设初始化,并开机自检_____________*/
132132
void sys_Device_Init_Seq(void)
133133
{
134+
u8 init_return;
135+
134136
/*用户应用的Device初始化序列——开始*/
135137

136138
/*用户IO初始化,可选择初始化某个特定器件或者所有器件(ALL_Index)*/
@@ -147,6 +149,40 @@ void sys_Device_Init_Seq(void)
147149
LCD_Init_no_FSMC();
148150
#endif
149151

152+
/*FATFS ff14 初始化*/
153+
#if SYSTEM_FATFS_ENABLE
154+
init_return = FATFS_Init(); if(init_return != 0){ FaultASSERT("FATFS_Init()",init_return,flag_Fault);}
155+
156+
// init_return = f_mount(fs[0],"DEV_ExFLASH:",1); //挂载外部SPI FLASH
157+
// if(init_return == 0X0D) //外部SPI FLASH磁盘的FAT文件系统错误,重新格式化
158+
// {
159+
// MKFS_PARM mkf_opts = //格式化选项
160+
// { .fmt = FM_SFD //FM_FAT32 还是 FM_SFD 不清楚,后者为没有引导区
161+
// //其他都保持默认就好~
162+
// };
163+
// init_return = f_mkfs("DEV_ExFLASH:",&mkf_opts,NULL,4096);//格式化FLASH,1,盘符;1,不需要引导区,8个扇区为1个簇
164+
// if(init_return==0)
165+
// {
166+
// f_setlabel((const TCHAR *)"0:DEV_ExFLASH"); //设置Flash磁盘的名字
167+
// }else FaultASSERT("f_mkfs DEV_ExFLASH",init_return,flag_Warning); //格式化失败
168+
// HAL_Delay(1000);
169+
// }
170+
171+
// init_return = f_mount(fs[1],"DEV_SD:",1); //挂载SDIO驱动的SD卡
172+
// if(init_return != 0){ FaultASSERT("f_mount fs[1]",init_return,flag_Warning);}
173+
174+
// init_return = f_mount(fs[2],"DEV_USB:",1); //挂载USB文件设备
175+
// if(init_return != 0){ FaultASSERT("f_mount fs[2]",init_return,flag_Warning);}
176+
177+
// init_return = f_mount(fs[3],"DEV_SPI_SD:",1); //挂载SPI驱动的SD卡
178+
// if(init_return != 0){ FaultASSERT("f_mount fs[3]",init_return,flag_Warning);}
179+
#endif
180+
181+
/*LWIP 2.1.2 初始化*/
182+
#if SYS_SUPPORT_LWIP
183+
184+
#endif
185+
150186
/*OLED初始化*/
151187
// OLED_Init();
152188

@@ -197,28 +233,56 @@ void sys_Device_Init_Seq(void)
197233
#if SYSTEM_IWDG_ENABLE
198234
sys_IWDG_ENABLE();
199235
#endif
236+
237+
200238
buzzer_bibi_once; //响一声表示初始化结束
201239
printf_uart(UART1,"System init over\r\n");
202240
}
203241

204242
/*____________运行错误提示和打印______________________________*/
205243
/********************************
206244
*描述:表示某步骤运行有问题,串口提示,灯提示,声提示
207-
*参数: FaultMessage:错误提示信息字符串
245+
*参数: 错误或者警告信息
246+
故障代号
247+
错误类别(可选flag_Fault或flag_Warning)
208248
*返回值: 1、NULL
209249
********************************/
210-
void FaultASSERT(char* FaultMessage)
250+
void FaultASSERT(char* FaultMessage,u8 code,u8 flag)
211251
{
212-
/*往串口1发送数据*/
213-
printf_uart(UART1,"Fault Message : %s\r\n",FaultMessage);
214-
printf_uart(UART1,"File&Line : %s,%d\r\n",__FILE__,__LINE__);
215-
LCD_ShowString(5,0,16,(u8*)FaultMessage);
216-
//灯提示,声提示
217-
buzzer_bibi_on;
218-
for(;;)
252+
char* faultMessage_buf = (char*)mymalloc(InrRAM,100 * sizeof(char));
253+
254+
switch(flag)
219255
{
220-
256+
case flag_Fault:
257+
sprintf_(faultMessage_buf,"Fault: %s, code:%d\r\n",FaultMessage,code);
258+
259+
/*往串口1发送数据*/
260+
printf_uart(UART1,"%s",faultMessage_buf);
261+
printf_uart(UART1,"File&Line: %s,%d\r\n",__FILE__,__LINE__);
262+
POINT_COLOR = RED;
263+
LCD_ShowString(5,0,16,(u8*)faultMessage_buf);
264+
265+
myfree(InrRAM,faultMessage_buf);
266+
//灯提示,声提示
267+
buzzer_bibi_on;
268+
for(;;)
269+
{
270+
//在错误的道路上,奔跑也没用,停止就是进步
271+
}
272+
case flag_Warning:
273+
sprintf_(faultMessage_buf,"Warning: %s, code:%d\r\n",FaultMessage,code);
274+
275+
printf_uart(UART1,"%s\r\n",faultMessage_buf);
276+
printf_uart(UART1,"File&Line: %s,%d\r\n",__FILE__,__LINE__);
277+
POINT_COLOR = YELLOW;
278+
LCD_ShowString(5,0,16,(u8*)faultMessage_buf);
279+
280+
myfree(InrRAM,faultMessage_buf);
281+
buzzer_bibi_once;
282+
break;
283+
default:break;
221284
}
285+
myfree(InrRAM,faultMessage_buf);
222286
}
223287

224288
/*_____________获取系统运行的时间________________________*/
@@ -355,6 +419,15 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
355419
static u8 is_runOnce4biOnce = 0;
356420
#endif
357421

422+
#if SYSTEM_UseTIM5ForTiming_ENABLE
423+
if(htim==(&TIM5_Handler))
424+
{
425+
//每 0.065536s中断一次
426+
TIM5_InterruptTimes++; //u16类型
427+
//0.065536 * 65536 = 4,294.967296s,TIM5_InterruptTimes溢出
428+
}
429+
#endif
430+
358431
/*注意:不要写入太多程序从而占用时间!*/
359432
if(htim==(&TIM4_Handler))
360433
{
@@ -566,6 +639,19 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
566639
#endif
567640
}
568641
#endif
642+
643+
#if SYSTEM_UseTIM5ForTiming_ENABLE
644+
if(htim->Instance==TIM5)
645+
{
646+
__HAL_RCC_TIM5_CLK_ENABLE(); //使能TIM5时钟
647+
648+
__HAL_TIM_CLEAR_IT(&TIM5_Handler, TIM_IT_UPDATE); // 清除更新中断标志位
649+
__HAL_TIM_SET_COUNTER(&TIM5_Handler,0); //清零TIM5定时器的计数器值
650+
651+
HAL_NVIC_SetPriority(TIM5_IRQn,1,0); //设置中断优先级,抢占优先级1
652+
HAL_NVIC_EnableIRQ(TIM5_IRQn); //开启ITM5中断
653+
}
654+
#endif
569655
}
570656

571657
/*__________定时器PWM初始化底层配置函数_____________*/
@@ -1044,6 +1130,56 @@ void TIM3_IRQHandler(void)
10441130

10451131

10461132

1133+
#if SYSTEM_UseTIM5ForTiming_ENABLE
1134+
1135+
u16 TIM5_InterruptTimes = 0;
1136+
1137+
TIM_HandleTypeDef TIM5_Handler;
1138+
1139+
void sys_TIM5_ENABLE(void)
1140+
{
1141+
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
1142+
TIM_MasterConfigTypeDef sMasterConfig = {0};
1143+
1144+
TIM5_Handler.Instance=TIM5; //通用定时器5
1145+
TIM5_Handler.Init.Prescaler=(84-1); //分频系数 计数频率1Mkz,即1us
1146+
TIM5_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器 0.065536s溢出一次
1147+
TIM5_Handler.Init.Period=(65536-1); //自动装载值
1148+
TIM5_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; //时钟分频因子
1149+
// TIM5_Handler.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
1150+
HAL_TIM_Base_Init(&TIM5_Handler);
1151+
1152+
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
1153+
HAL_TIM_ConfigClockSource(&TIM5_Handler, &sClockSourceConfig);
1154+
1155+
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
1156+
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
1157+
HAL_TIMEx_MasterConfigSynchronization(&TIM5_Handler, &sMasterConfig);
1158+
1159+
HAL_TIM_Base_Start_IT(&TIM5_Handler); //使能定时器5和定时器5更新中断:TIM_IT_UPDATE
1160+
}
1161+
1162+
//定时器5中断服务函数
1163+
void TIM5_IRQHandler(void)
1164+
{
1165+
HAL_TIM_IRQHandler(&TIM5_Handler);
1166+
}
1167+
1168+
//测量(*FunctionForTiming)()函数运行时间,返回单位为us的运行时间,没有超时退出机制,不适合在有操作系统的环境中用
1169+
//最长可测量约4290s,0.065536 * 65536 = 4,294.967296s,TIM5_InterruptTimes溢出
1170+
u32 Timing(void (*FunctionForTiming)())
1171+
{
1172+
u32 FunctionRunTime_us;
1173+
1174+
TIM5_InterruptTimes = 0;
1175+
__HAL_TIM_SET_COUNTER(&TIM5_Handler,0);
1176+
(*FunctionForTiming)();
1177+
FunctionRunTime_us = (u32)__HAL_TIM_GET_COUNTER(&TIM5_Handler) + (u32)TIM5_InterruptTimes * 65536;
1178+
1179+
return FunctionRunTime_us;
1180+
}
1181+
1182+
#endif
10471183
#if SYSTEM_UART1_ENABLE||SYSTEM_UART2_ENABLE||SYSTEM_UART3_ENABLE
10481184

10491185
UART_HandleTypeDef UART1_Handler,UART2_Handler,UART3_Handler; //UART句柄
@@ -1598,7 +1734,7 @@ void sys_RTC_Enable(void)
15981734
{
15991735
RTC_TimeTypeDef sTime = {0};
16001736
RTC_DateTypeDef sDate = {0};
1601-
RTC_AlarmTypeDef sAlarm = {0};
1737+
// RTC_AlarmTypeDef sAlarm = {0};
16021738

16031739
RTC_Handler.Instance=RTC;
16041740
RTC_Handler.Init.HourFormat = RTC_HOURFORMAT_24;
@@ -1627,19 +1763,18 @@ void sys_RTC_Enable(void)
16271763
sDate.WeekDay = RTC_Get_Week(((u16)BCD2HEX(sDate.Year) + 1970),BCD2HEX(sDate.Month),BCD2HEX(sDate.Date));
16281764
HAL_RTC_SetDate(&RTC_Handler, &sDate, RTC_FORMAT_BCD);
16291765

1630-
/** Enable the Alarm A
1631-
*/
1632-
sAlarm.AlarmTime.Hours = 0x23; //直接BCD格式写
1633-
sAlarm.AlarmTime.Minutes = 0x31;
1634-
sAlarm.AlarmTime.Seconds = 0x29;
1635-
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
1636-
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
1637-
sAlarm.AlarmMask = RTC_ALARMMASK_SECONDS; //可选mask时分秒和所有
1638-
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; //可选日期和星期
1639-
sAlarm.AlarmDateWeekDay = 0x1; //不懂..
1640-
sAlarm.Alarm = RTC_ALARM_A;
1641-
HAL_RTC_SetAlarm_IT(&RTC_Handler, &sAlarm, RTC_FORMAT_BCD);
1642-
HAL_RTC_DeactivateAlarm(&RTC_Handler,RTC_ALARM_A);
1766+
/* Enable the Alarm A*/
1767+
// sAlarm.AlarmTime.Hours = 0x23; //直接BCD格式写
1768+
// sAlarm.AlarmTime.Minutes = 0x31;
1769+
// sAlarm.AlarmTime.Seconds = 0x29;
1770+
// sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
1771+
// sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
1772+
// sAlarm.AlarmMask = RTC_ALARMMASK_SECONDS; //可选mask时分秒和所有
1773+
// sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; //可选日期和星期
1774+
// sAlarm.AlarmDateWeekDay = 0x1; //不懂..
1775+
// sAlarm.Alarm = RTC_ALARM_A;
1776+
// HAL_RTC_SetAlarm_IT(&RTC_Handler, &sAlarm, RTC_FORMAT_BCD); //默认不开启闹钟
1777+
// HAL_RTC_DeactivateAlarm(&RTC_Handler,RTC_ALARM_A);
16431778

16441779
HAL_RTCEx_BKUPWrite(&RTC_Handler,RTC_BKP_DR1,0X5050);//标记已经初始化过了
16451780

@@ -1810,6 +1945,23 @@ int myatoi(const char *str)
18101945
}
18111946

18121947

1948+
/* 实现伪随机数的支持*/
1949+
unsigned int Curl_rand(void)
1950+
{
1951+
static unsigned int gtimes = 0; //记录被调用了多少次
1952+
static unsigned int randseed = 50; //随机数种子
1953+
1954+
if(++gtimes > (randseed & 0x000f)) //当被调用(randseed & 0x000f)次后更新一下随机数种子
1955+
{
1956+
sys_GetsysRunTime(NULL,NULL,(u16*)&randseed);
1957+
gtimes = 0;
1958+
}
1959+
1960+
/* 返回一个无符号32位整型的伪随机数. */
1961+
randseed = randseed * 3971038;
1962+
return (randseed << 7) | ((randseed >> 7) & 0xFFFF);
1963+
}
1964+
18131965
//THUMB指令不支持汇编内联
18141966
//采用如下方法实现执行汇编指令WFI
18151967
void WFI_SET(void)

0 commit comments

Comments
 (0)