Skip to content

Commit 972297d

Browse files
committed
菜单可用,2.1版本发布
1 parent 92c769a commit 972297d

File tree

112 files changed

+660
-7242
lines changed

Some content is hidden

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

112 files changed

+660
-7242
lines changed

STM32F1_HAL_freeRTOS_Framework/Devices/LCD ILI9341/GUI.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@
1515
3——在程序初始化里调用一次LCD_Init();用来初始化
1616
4——看下面可调用的GUI函数
1717
18+
5——注意: 使用如LCD_ShowString()等显示函数时,如果是传入函数的,
19+
函数形参最好用如const char * const menuid方式(不改变指针和内容)或者使用拷贝的方式传到显示函数中,不要直接给,
20+
因为这个函数(其他函数也有可能)可能会改变指针或其内容!别当我没说!有时间优化一下这个函数~
21+
22+
6——信息: lcddev.
23+
width; //LCD 宽度
24+
height; //LCD 高度
25+
id; //LCD ID
26+
dir; //横屏还是竖屏控制:0,竖屏;1,横屏。
27+
1828
可选的颜色:
1929
2030
//使用这两个变量定义画笔颜色和背景色
@@ -123,7 +133,7 @@ void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);
123133
//******************************************************************
124134
//函数名: LCD_ShowString———————————————————————————————————————————————————————————————————————————————————用于写英文和数字
125135
//作者: xiao冯@全动电子——————————————————————————————————————————————————————————————————————————————————注:要显示数字变量等信息只需用sprintf,然后用此函数显示
126-
//——————————————————例子:————————————————————————————
136+
//——————————————————例子:
127137
/* sprintf(RuningTime_SHOW_STR,"%dmin/%dmin",Timer_IT_flags._1min,SetMaxRuningMins);
128138
POINT_COLOR=WHITE;
129139
LCD_ShowString(10,10,16,(u8*)RuningTime_SHOW_STR,0);

STM32F1_HAL_freeRTOS_Framework/README.md

Lines changed: 0 additions & 103 deletions
This file was deleted.

STM32F1_HAL_freeRTOS_Framework/SYSTEM/PeriphConfig/PeriphConfig.c

Lines changed: 239 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 C0 C1 C2 C3 C4 C5
1818
* CH1/PA15 CH2/PB3 CH3/PB10 CH4/PB11 TIM2四个PWM通道
1919
* PA0 StandBy待机低功耗模式的唤醒按键WKUP(占用0线外部中断)
20-
*...
20+
* PA4 PA5 DAC_OUT1 DAC_OUT2(hd容量系类外设)
21+
* PC8/SDIO_D0 PC9/SDIO/D1 PC10/SDIO_D2 SDIO固定引脚,用于接SD卡
22+
PC11/SDIO_D3 PC12/SDIO_CK PD2/SDIO_CMD
2123
2224
用户: *
2325
*/
@@ -1472,3 +1474,239 @@ u16 STMFLASH_ReadHalfWord(u32 faddr)
14721474
}
14731475

14741476
#endif
1477+
1478+
1479+
/*__________________________DAC________________________________________*/
1480+
#if SYSTEM_DAC_OUT1_ENABLE||SYSTEM_DAC_OUT2_ENABLE
1481+
1482+
DAC_HandleTypeDef DAC1_Handler;//DAC句柄
1483+
1484+
void sys_DAC_ENABLE(void)
1485+
{
1486+
DAC_ChannelConfTypeDef DACCH1_Config;
1487+
DAC_ChannelConfTypeDef DACCH2_Config;
1488+
1489+
DAC1_Handler.Instance=DAC;
1490+
HAL_DAC_Init(&DAC1_Handler); //初始化DAC
1491+
1492+
/*通道1配置*/
1493+
DACCH1_Config.DAC_Trigger=DAC_TRIGGER_NONE; //不使用触发功能
1494+
/*可选:
1495+
DAC_TRIGGER_T6_TRGO
1496+
DAC_TRIGGER_T7_TRGO
1497+
DAC_TRIGGER_T8_TRGO
1498+
DAC_TRIGGER_T2_TRGO
1499+
DAC_TRIGGER_T4_TRGO
1500+
DAC_TRIGGER_EXT_IT9
1501+
DAC_TRIGGER_SOFTWARE*/
1502+
DACCH1_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE; //DAC1输出缓冲关闭
1503+
/*通道2配置*/
1504+
DACCH2_Config.DAC_Trigger=DAC_TRIGGER_NONE; //不使用触发功能
1505+
DACCH2_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE; //DAC1输出缓冲关闭
1506+
1507+
if(SYSTEM_DAC_OUT1_ENABLE)
1508+
HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH1_Config,DAC_CHANNEL_1);//DAC通道1配置
1509+
HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_1); //开启DAC通道1
1510+
if(SYSTEM_DAC_OUT2_ENABLE)
1511+
HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH2_Config,DAC_CHANNEL_2);//DAC通道2配置
1512+
HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_2); //开启DAC通道2
1513+
1514+
1515+
}
1516+
1517+
//DAC底层驱动,时钟配置,引脚 配置
1518+
//此函数会被HAL_DAC_Init()调用
1519+
//hdac:DAC句柄
1520+
void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
1521+
{
1522+
if(SYSTEM_DAC_OUT1_ENABLE)
1523+
{
1524+
GPIO_InitTypeDef GPIO_Initure;
1525+
__HAL_RCC_DAC_CLK_ENABLE(); //使能DAC时钟
1526+
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
1527+
1528+
GPIO_Initure.Pin=GPIO_PIN_4; //PA4
1529+
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
1530+
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
1531+
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
1532+
}
1533+
1534+
if(SYSTEM_DAC_OUT2_ENABLE)
1535+
{
1536+
GPIO_InitTypeDef GPIO_Initure;
1537+
__HAL_RCC_DAC_CLK_ENABLE(); //使能DAC时钟
1538+
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
1539+
1540+
GPIO_Initure.Pin=GPIO_PIN_5; //PA5
1541+
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
1542+
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
1543+
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
1544+
}
1545+
}
1546+
1547+
//设置通道1输出电压
1548+
//vol:0~3.30V
1549+
void DAC_Set_Ch1_Vol(float vol)
1550+
{
1551+
float temp = vol;
1552+
temp = (temp/3.30)*4096.0;
1553+
HAL_DAC_SetValue(&DAC1_Handler,DAC_CHANNEL_1,DAC_ALIGN_12B_R,(uint32_t)temp);//12位右对齐数据格式设置DAC值
1554+
}
1555+
1556+
//设置通道2输出电压
1557+
//vol:0~3.30V
1558+
void DAC_Set_Ch2_Vol(float vol)
1559+
{
1560+
float temp = vol;
1561+
temp = (temp/3.30)*4096.0;
1562+
HAL_DAC_SetValue(&DAC1_Handler,DAC_CHANNEL_2,DAC_ALIGN_12B_R,(uint32_t)temp);//12位右对齐数据格式设置DAC值
1563+
}
1564+
1565+
1566+
#endif
1567+
1568+
/*____________________SDIO SD_____________________________________________*/
1569+
#if SYSTEM_SDIO_SD_ENABLE
1570+
1571+
SD_HandleTypeDef SDCARD_Handler; //SD卡句柄
1572+
HAL_SD_CardInfoTypeDef SDCardInfo; //SD卡信息
1573+
HAL_SD_CardCIDTypeDef SDCard_CID; //SD卡CID信息
1574+
1575+
1576+
//SD卡初始化
1577+
//返回值:0 初始化正确;其他值,初始化错误
1578+
u8 SD_Init(void)
1579+
{
1580+
u8 SD_Error;
1581+
1582+
//初始化时的时钟不能大于400KHZ
1583+
SDCARD_Handler.Instance=SDIO;
1584+
SDCARD_Handler.Init.ClockEdge=SDIO_CLOCK_EDGE_RISING; //上升沿
1585+
SDCARD_Handler.Init.ClockBypass=SDIO_CLOCK_BYPASS_DISABLE; //不使用bypass模式,直接用HCLK进行分频得到SDIO_CK
1586+
SDCARD_Handler.Init.ClockPowerSave=SDIO_CLOCK_POWER_SAVE_DISABLE; //空闲时不关闭时钟电源
1587+
SDCARD_Handler.Init.BusWide=SDIO_BUS_WIDE_1B; //1位数据线
1588+
SDCARD_Handler.Init.HardwareFlowControl=SDIO_HARDWARE_FLOW_CONTROL_ENABLE;//开启硬件流控
1589+
SDCARD_Handler.Init.ClockDiv=SDIO_TRANSFER_CLK_DIV; //SD传输时钟频率最大25MHZ
1590+
1591+
SD_Error=HAL_SD_Init(&SDCARD_Handler);
1592+
if(SD_Error!=HAL_OK) return 1;
1593+
1594+
SD_Error=HAL_SD_ConfigWideBusOperation(&SDCARD_Handler,SDIO_BUS_WIDE_4B);//使能宽总线模式
1595+
if(SD_Error!=HAL_OK) return 2;
1596+
return 0;
1597+
}
1598+
1599+
1600+
//SDMMC底层驱动,时钟使能,引脚配置,DMA配置
1601+
//此函数会被HAL_SD_Init()调用
1602+
//hsd:SD卡句柄
1603+
void HAL_SD_MspInit(SD_HandleTypeDef *hsd)
1604+
{
1605+
DMA_HandleTypeDef TxDMAHandler,RxDMAHandler;
1606+
GPIO_InitTypeDef GPIO_Initure;
1607+
1608+
__HAL_RCC_SDIO_CLK_ENABLE(); //使能SDIO时钟
1609+
//__HAL_RCC_DMA2_CLK_ENABLE(); //使能DMA2时钟
1610+
__HAL_RCC_GPIOC_CLK_ENABLE(); //使能GPIOC时钟
1611+
__HAL_RCC_GPIOD_CLK_ENABLE(); //使能GPIOD时钟
1612+
1613+
//PC8,9,10,11,12
1614+
GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
1615+
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //推挽复用
1616+
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
1617+
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
1618+
HAL_GPIO_Init(GPIOC,&GPIO_Initure); //初始化
1619+
1620+
//PD2
1621+
GPIO_Initure.Pin=GPIO_PIN_2;
1622+
HAL_GPIO_Init(GPIOD,&GPIO_Initure); //初始化
1623+
}
1624+
1625+
/*
1626+
//得到卡信息
1627+
//cardinfo:卡信息存储区
1628+
HAL_SD_GetCardInfo(&SDCARD_Handler,&SDCardInfo);
1629+
*/
1630+
1631+
//读SD卡
1632+
//buf:读数据缓存区
1633+
//sector:扇区地址
1634+
//cnt:扇区个数
1635+
//返回值:错误状态;0,正常;其他,错误代码;
1636+
u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
1637+
{
1638+
u8 sta = HAL_OK;
1639+
u32 timeout=SD_TIMEOUT;
1640+
long long lsector=sector;
1641+
INTX_DISABLE();//关闭总中断(POLLING模式,严禁中断打断SDIO读写操作!!!)
1642+
sta=HAL_SD_ReadBlocks(&SDCARD_Handler, (uint8_t*)buf,lsector,cnt,SD_TIMEOUT);//多个sector的读操作
1643+
1644+
//等待SD卡读完
1645+
while(HAL_SD_GetCardState(&SDCARD_Handler) != HAL_SD_CARD_READY)
1646+
{
1647+
if(timeout-- == 0)
1648+
{
1649+
sta = HAL_BUSY;
1650+
}
1651+
}
1652+
INTX_ENABLE();//开启总中断
1653+
return sta;
1654+
}
1655+
1656+
//写SD卡
1657+
//buf:写数据缓存区
1658+
//sector:扇区地址
1659+
//cnt:扇区个数
1660+
//返回值:错误状态;0,正常;其他,错误代码;
1661+
u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
1662+
{
1663+
u8 sta = HAL_OK;
1664+
u32 timeout=SD_TIMEOUT;
1665+
long long lsector=sector;
1666+
INTX_DISABLE();//关闭总中断(POLLING模式,严禁中断打断SDIO读写操作!!!)
1667+
sta=HAL_SD_WriteBlocks(&SDCARD_Handler,(uint8_t*)buf,lsector,cnt,SD_TIMEOUT);//多个sector的写操作
1668+
1669+
//等待SD卡读完
1670+
while(HAL_SD_GetCardState(&SDCARD_Handler) != HAL_SD_CARD_READY)
1671+
{
1672+
if(timeout-- == 0)
1673+
{
1674+
sta = HAL_BUSY;
1675+
}
1676+
}
1677+
INTX_ENABLE();//开启总中断
1678+
return sta;
1679+
}
1680+
1681+
1682+
//通过串口打印SD卡相关信息
1683+
void show_sdcard_info(void)
1684+
{
1685+
uint64_t CardCap; //SD卡容量
1686+
1687+
HAL_SD_GetCardCID(&SDCARD_Handler,&SDCard_CID); //获取CID
1688+
HAL_SD_GetCardInfo(&SDCARD_Handler,&SDCardInfo); //获取SD卡信息
1689+
switch(SDCardInfo.CardType)
1690+
{
1691+
case CARD_SDSC:
1692+
{
1693+
if(SDCardInfo.CardVersion == CARD_V1_X)
1694+
printf_uart(UART1,"Card Type:SDSC V1\r\n");
1695+
else if(SDCardInfo.CardVersion == CARD_V2_X)
1696+
printf_uart(UART1,"Card Type:SDSC V2\r\n");
1697+
}
1698+
break;
1699+
case CARD_SDHC_SDXC:
1700+
printf_uart(UART1,"Card Type:SDHC\r\n");
1701+
break;
1702+
}
1703+
CardCap=(uint64_t)(SDCardInfo.LogBlockNbr)*(uint64_t)(SDCardInfo.LogBlockSize); //计算SD卡容量
1704+
printf_uart(UART1,"Card ManufacturerID:%d\r\n",SDCard_CID.ManufacturerID); //制造商ID
1705+
printf_uart(UART1,"Card RCA:%d\r\n",SDCardInfo.RelCardAdd); //卡相对地址
1706+
printf_uart(UART1,"LogBlockNbr:%d \r\n",(u32)(SDCardInfo.LogBlockNbr)); //显示逻辑块数量
1707+
printf_uart(UART1,"LogBlockSize:%d \r\n",(u32)(SDCardInfo.LogBlockSize)); //显示逻辑块大小
1708+
printf_uart(UART1,"Card Capacity:%d MB\r\n",(u32)(CardCap>>20)); //显示容量(右移20位,以MB显示)
1709+
printf_uart(UART1,"Card BlockSize:%d\r\n\r\n",SDCardInfo.BlockSize); //显示块大小
1710+
}
1711+
1712+
#endif

0 commit comments

Comments
 (0)