|
本帖最后由 happy112 于 2016-6-22 14:39 编辑
开放所有制作资料方便大家diy
KBLSTM32基础套件主要由核心板(CB)以及基础外设板(PB-B)构成。核心板和外设板采用专有接口接插方式连接。
KBLSTM32基础套件的整体效果图(外形尺寸:15cm*10cm):
A——MCU,STM32核心板
B——电源模块,提供了两种供电方式:5V圆头适配器或者USB方式,同时提供了电源引出插针,方便实验调试等用处。
C——USB转串口模块,目前计算机上拥有串口的已经少之又少,所以我们去掉了串口,直接设计了USB转串口,可以提供STM32和计算机的串口通信和对STM32的ISP下载。
D——六位数码管,用于数码显示实验。采用两片锁存器,实现了处理器管脚的复用。数码管采用共阴极数码管,高电平点亮。
E——LCD1602和LCD12864的接口。
F——两个电位器,用于调节LCD1602和LCD12864屏幕对比度。
G——8位LED,可用于发光二极管,GPIO的实验。采用了共阳极接法。
H——键盘,包括K1到K16矩阵键盘和K01到K04独立键盘。
I——DS18B20温度传感器接口。注意丝印指示温度传感器的接法。
J——红外接收管。
K——AT24C02电路。
L——蜂鸣器电路,低电平控制使能。
M——步进电机驱动电路,经过锁存器控制使能,以及2003的驱动。
N——步进电机外部驱动电源的引入端口,步进电机可以由外部电源提供电流驱动。
O——继电器电路。
A——Boot0,Boot1启动顺序选择,使用跳线帽。
B——系统时钟电路,高频8MHz,低频32768Hz。
C——核心板上发光二极管,低电平使能。
D——复位按键。
E、F——STM32所有管脚引出。
G——PD0,1,2和电源端口,向外提供3.3V输出。
H——STM32F103RB主芯片。
I——两位按键,触发低电平。
J——ISP下载电路,可以通过串口下载程序。
K——JTAG/SWD下载调试电路
L——上电电源指示灯。
M——miniUSB接口,同时可以为核心板供电。
N——5V-3.3V电路,使用优质滤波电容保证电源。
O——RTC后备电池。
PCB:
原理图:
下面是这个stm32板子的测试程序资料包
主程序如下:
- /*
- /////////////////////////////////////////////////////////////////////////////////
- // _______ _______ //
- // |____ || ____ \ //
- // / / | | \ Author : ZeDis //
- // / / | | E-mail : zedis@sina.com //
- // / / | | QQ : 1599882166 //
- // / /___ | |____/ Subordination: Kinlby S&T Co.,Ltd. //
- // /_______||_______/ //
- // //
- /////////////////////////////////////////////////////////////////////////////////
- // Filename : main.c
- // Project : PROJECT
- // Develop-T : Keil MDK 4.2 & STM32STDPERIPH_LIB 3.5
- // Version : v1.0
- // Releas Date: 2012.06.26
- // Description:
- //
- ////////////////////// (C) COPYRIGHT 2012 KINBLY S&T/////////////////////////////
- // This project developed based on the periph-device library of STMicroelectr
- //-onics,we declare the copyright of STMicroelectronics periph-device library.
- /////////////////////////////////////////////////////////////////////////////////
- // History Releas Version
- // 2012.06.26 V1.0
- // Update records: Achieved the funciton in <description>.
- // —— By ZeDis
- /////////////////////////////////////////////////////////////////////////////////
- */
- /*-------------------------- Includes ----------------------------------------*/
- #include "stm32f10x.h"
- #include "function.h"
- /*-------------------------- Macros -------------------------------------------*/
- /*-------------------------- Private typedef ----------------------------------*/
- /*-------------------------- Variables ---------------------------------------*/
- ErrorStatus HSEStartUpStatus;
- uchar TestType ;
- u8 OfflineFullTest ;
- /*-------------------------- Private function prototypes ----------------------*/
- void SYS_GPIO_init(void);
- void NVIC_Configuration(void);
- void RCC_Configuration(void);
- void TestMenu(void);
- void ScanK1_OffLine(void);
- void EXTI9_5_Config(void);
- /*-------------------------- Function body ------------------------------------*/
- /****************************************************************************
- 函数名称:main
- 函数功能:主函数,程序入口
- 参数介绍:无
- 返回值 :无
- 注意事项:无
- *****************************************************************************/
- int main(void)
- {
- // 配置系统时钟
- RCC_Configuration();
- // 初始化几个关键管脚
- SYS_GPIO_init();
- // 配置串口
- Usart_Init();
- // 配置中断向量
- NVIC_Configuration();
- // 清除整板测试标志位
- OfflineFullTest = 0 ;
- // 先不设置测试项目
- TestType = NULL_TYPE ;
- // 上电4s内检测离线全板测试命令
- ScanK1_OffLine();
- // 打印测试项目菜单
- TestMenu();
- while(1)
- {
- Function(TestType);
- }
- }
- /****************************************************************************
- 函数名称:SYS_GPIO_init
- 函数功能:初始化开发套件上几个关键管脚
- 参数介绍:无
- 返回值 :无
- 注意事项:无
- *****************************************************************************/
- void SYS_GPIO_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- //配置核心板上的两个LED的引脚:PB14,PB15
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_SetBits(GPIOB, GPIO_Pin_15);
- ///////
- //关闭继电器, 电动机 的锁存器的使能,不让其工作。
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- RELY_MOTO_DIS;
- ///////
- //关闭板上数码管的段选和位选使能
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 ;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- SEG_WEI_DIS;
- SEG_DU_DIS;
- ////////
- //关闭蜂鸣器
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- FM_BEEP_OFF;
- /////////
- //配置K01,K02,K03,K04为输入
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- /////////
- }
- /****************************************************************************
- 函数名称:NVIC_Configuration
- 函数功能:配置中断向量控制器
- 参数介绍:无
- 返回值 :无
- 注意事项:无
- *****************************************************************************/
- void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- // 选择使用优先级分组第0组:4位响应优先级
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- //使能串口中断
- // 指定串口全局中断向量号:37
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- // 指定相应优先级 0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- // 使能
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- ////////
- // 选择使用优先级分组第1组:1位抢占优先级,3位响应优先级
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
- // 配置RTC全局中断:3
- NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
- // 指定抢占优先级别 1
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- // 指定响应优先级别 0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- // 使能RTC中断
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- // 配置RTC
- NVIC_Init(&NVIC_InitStructure);
- }
- /****************************************************************************
- 函数名称:RCC_Configuration
- 函数功能:配置系统时钟树
- 参数介绍:无
- 返回值 :无
- 注意事项:无
- *****************************************************************************/
- void RCC_Configuration(void)
- {
- // 复位RCC(只用在调试模式)
- RCC_DeInit();
- // 使能外部高速时钟 HSE
- RCC_HSEConfig(RCC_HSE_ON);
- // 等待HSE稳定
- HSEStartUpStatus = RCC_WaitForHSEStartUp();
- //HSE 稳定后,开始配置系统工作时钟
- if(HSEStartUpStatus == SUCCESS)
- {
- // HCLK = SYSCLK 设置高速总线时钟=系统时钟
- RCC_HCLKConfig(RCC_SYSCLK_Div1);
- // PCLK2 = HCLK 设置低速总线2时钟=高速总线时钟
- RCC_PCLK2Config(RCC_HCLK_Div1);
- // PCLK1 = HCLK/2 设置低速总线1的时钟=高速时钟的二分频
- RCC_PCLK1Config(RCC_HCLK_Div2);
- // 令Flash处于等待状态,2是针对高频时钟的
- FLASH_SetLatency(FLASH_Latency_2);
- // 使能flash预读取缓冲区
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
- // PLLCLK = 8MHz * 9 = 72 MHz 利用锁相环讲外部8Mhz晶振9倍频到72Mhz
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
- // Enable PLL 使能锁相环
- RCC_PLLCmd(ENABLE);
- // 等待锁相环输出稳定
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
- {
- }
- // 将锁相环输出设置为系统时钟
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
- // 等待校验成功
- while(RCC_GetSYSCLKSource() != 0x08)
- {
- }
- }
- ///////
- // 使能串口1的时钟,开发套件上使用串口1作为通信接口
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
- // 使能定时器3时钟,用于蜂鸣器产生音量的变化
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- // 使能GPIO A,B,C和复用引脚外设,允许外设工作
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
- RCC_APB2Periph_GPIOC| RCC_APB2Periph_AFIO, ENABLE);
- }
- /****************************************************************************
- 函数名称:TestMenu
- 函数功能:测试项目菜单
- 参数介绍:无
- 返回值 :无
- 注意事项:无
- *****************************************************************************/
- void TestMenu(void)
- {
- USART1_Puts("\r\n ********************************************************");
- USART1_Puts("\r\n **============= HRB KBL S&T Co,.Ltd. =================**");
- USART1_Puts("\r\n **========= 用 * 心 * 做 * 到 * 更 * 好 ! ============**");
- USART1_Puts("\r\n **====================================================**");
- USART1_Puts("\r\n * 请按照项目编号进行相应的外设测试: **");
- USART1_Puts("\r\n * F - 执行全板测试; **");
- USART1_Puts("\r\n * 1 - 板上发光二极管测试; **");
- USART1_Puts("\r\n * 2 - 板上多位数码管测试; **");
- USART1_Puts("\r\n * 3 - 板上LCD1602测试(请断电换屏); **");
- USART1_Puts("\r\n * 4 - 板上矩阵键盘测试; **");
- USART1_Puts("\r\n * 5 - 板上LCD12864测试(请断电换屏); **");
- USART1_Puts("\r\n * 6 - 板上RTC测试; **");
- USART1_Puts("\r\n * 7 - 蜂鸣器测试; **");
- USART1_Puts("\r\n * 8 - AT24C02测试; **");
- USART1_Puts("\r\n * 9 - 红外遥控器测试; **");
- USART1_Puts("\r\n * 0 - 温度传感器18b20测试; **");
- USART1_Puts("\r\n * a - 继电器,步进电机测试; **");
- USART1_Puts("\r\n * Other - 显示测试项选择菜单; **");
- USART1_Puts("\r\n ********************************************************");
- }
- /****************************************************************************
- 函数名称:ScanK1_OffLine
- 函数功能:扫描核心板上K1动作,以返回离线全板测试命令
- 参数介绍:无
- 返回值 :无
- 注意事项:无
- *****************************************************************************/
- void ScanK1_OffLine(void)
- {
- u16 Count ;
- GPIO_InitTypeDef GPIO_InitStructure;
- // 配置PC7,核心板上的K1,用于产生离线全板测试命令
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- // 关闭D2,开始离线整板测试命令扫描
- GPIO_SetBits(GPIOB,GPIO_Pin_14);
- //一共查询500次,如果在此过程中发现K1按下,则认为产生离线整板测试命令
- for(Count = 500 ; Count>0;Count--)
- {
- DelayMs(5);
- // 闪烁指示
- GPIO_WriteBit(GPIOB, GPIO_Pin_15, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_15)));
- // K1按下
- if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7))
- { // 消抖
- DelayMs(15);
- if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7))
- {// 置位:离线整板测试标志位;测试全部项目;置位:全部测试标志位
- OfflineFullTest = 1 ;
- TestType = FULL_TYPE ;
- FullTestFlag = 1 ;
- ///////
- }
- }
- }
- /////////
- // D2 亮起,结束离线命令扫描
- GPIO_ResetBits(GPIOB,GPIO_Pin_14);
- }
- /******************** (C) COPYRIGHT KBL ** END OF FILE **********************/
复制代码
开发板全部资料(压缩包)下载:
|
评分
-
查看全部评分
|