这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » 【系统滴答&18B20】16号同学的作业本

共40条 1/4 1 2 3 4 跳转至

【系统滴答&18B20】16号同学的作业本

菜鸟
2014-09-13 22:42:18     打赏

STM32开发板学习

 焊接:http://forum.eepw.com.cn/thread/260879/1/#1

 调试:http://forum.eepw.com.cn/thread/260879/2/#16

 Keil的安装与破解:http://forum.eepw.com.cn/thread/260879/3/#22

LED闪烁呈Z字形;RGB闪烁6彩,不含白光:http://forum.eepw.com.cn/thread/260879/3/#26

 

LED&RGB 用位操作实现:http://forum.eepw.com.cn/thread/260879/4/#31

按键,数码管显示计数&按键切换扫描速度 :  http://forum.eepw.com.cn/thread/260879/4/#35

串口发送信息控制LED闪烁速度:http://forum.eepw.com.cn/thread/260879/5/#43

 外部中断 按键点亮 熄灭LED http://forum.eepw.com.cn/thread/260879/7/#68

 

外部中断 定时器防抖 http://forum.eepw.com.cn/thread/260879/8/#74

 定时器中断闪烁LED(TIM2 TIM3) http://forum.eepw.com.cn/thread/260879/7/#70

 PWM-RGB渐变全彩 http://forum.eepw.com.cn/thread/260879/8/#75

 PWM-ADC调节RGB色彩亮度http://forum.eepw.com.cn/thread/260879/9/#82

 IIC-计上电次数 http://forum.eepw.com.cn/thread/260879/9/#84

 系统滴答&18B20:

十进制输出ID: http://forum.eepw.com.cn/thread/260879/9/#86

十六进制输出ID: http://forum.eepw.com.cn/thread/260879/10/#92

 

作业一:焊接

 

一次焊接贴片元器件,有不对的地方请指正

 

材料准备:焊锡,焊锡膏,马蹄头老铁,刀头烙铁,镊子,松香

在焊接贴片前,先在焊盘上涂抹一层焊锡膏

先在焊盘上涂抹上焊锡膏 

对齐芯片引脚,先用焊锡固定对角线方向的两个引脚

然后就可以大面积焊接

有焊锡膏作用,引脚不至于相黏

 

LED贴片也一样,现在焊盘上涂抹一层焊锡膏,对齐引脚

LED对齐 

用马蹄头烙铁粘少量焊锡,加热焊盘,将焊锡轻引到焊盘上

LED焊接完毕

 

ARM芯片焊接:

同样在焊盘上涂抹焊锡膏,用镊子对齐引脚

 

给烙铁换一个刀头,把板子固定在一个面上

 

由于焊接ARM的过程太曲折 - - 差点焊坏了,简述一下过程

不用加锡,烙铁本身带有的少量锡就够了。

刀头烙铁的长边紧贴焊盘,等待焊盘上的锡变热,液锡引向焊盘即可

不过由于引脚太密集,难免会粘黏在一起,这种情况用烙铁沾一下松香再将多余的锡刮去(说得很容易)

- - 完成焊接

 

其他元件的焊接过程大同小异 不一一例举

 

下面是完成图

 

 

 


菜鸟
2014-10-17 10:50:40     打赏
2楼

真的焊错了哦,真是火眼金睛

现在已经改过了


菜鸟
2014-10-17 22:27:18     打赏
3楼
 

作业二:调试过程 

 

首先把BOOT0电位拉低,接好USB后,核心板的两只LED均亮起; 

 

打开串口调试助手,按下核心板的RESET,可见如下串口提示信息,并开始按步骤进行调试。 

 

我焊接的时候笨手笨脚弄掉了两个焊盘哎。。。当作血淋林的教训了。。 

 

1.扩展版的LED依次全部亮起,并全部同时亮 起闪烁两次。 


2.蜂鸣器bibi地响4声。 


3.RGB三原色依次亮起蓝红绿白光。 


4.二位数码管的每一段依次亮起,并全部同时亮起闪烁两次。 


5.RGB脉宽调制,依次渐变出黄白蓝紫。 

 

 


6.依次按下S1,S2,S3,S4,串口信息显示按键测试完毕即可。 


7.总线读写测试。 


8.ADC测试,将可变电阻旁边的两根排针短接,调节可变电阻。可见ADC转换结果随可变电阻的变化而变化。 


9.温度测试,将手放在温度感应器上,串口出现的温度信息略变高即测试成功。 


10.LCD测试,手头暂时没有这个模块,先跳过了。 


11.遥控器测试红外线。。今早试了下,我的红外线测试不成功。回来把各部分相关的元器件补焊了一下,下次有遥控的时候再试试。。 


菜鸟
2014-10-18 08:18:41     打赏
4楼
差别在于?

菜鸟
2014-10-18 10:18:18     打赏
5楼
弱弱地问一下, 我发的图片看上去是一把叉,你们能看见图片原貌吗?

菜鸟
2014-10-18 10:43:22     打赏
6楼

搭建开发平台:安装并破解Keil

 

行mdk472的可执行文件,按向导的步骤安装。

根据自己的需要选择安装路径

此处注意邮箱格式要合理

此处默认,NEXT

此处的两个选项可选可不选

 

安装完毕以后运行Keil,在File一栏查看License Management,将右上角的CID复制一下。

 

 

 

运行KEIL_Lic的可执行文件破解Keil,将刚才复制的CID粘贴在相应位置,目标Target选择ARM,点击Generate获得注册码并将其复制。

 

再回到Keil,打开License Management,将复制的注册码粘贴在最后的LIC一栏,点击Add LIC,若最下面的方框内出现LIC Added Sucessfully表示破解成功。

 

值得一提的是,Win8上要破解Keil,必须以

管理员身份运行。本人亲自测验。

 


菜鸟
2014-10-21 13:27:28     打赏
7楼

作业四: 学号为偶数的同学让LED闪烁呈Z字形;RGB闪烁6彩,不含白光。

 


视频地址:http://player.youku.com/player.php/sid/XODA4MDI4NDk2/v.swf

#include "stm32f10x.h"
#include "stm32_eval.h"
GPIO_InitTypeDef GPIO_InitStructure;
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void RCC_Configuration(void)//时钟配置
{
  RCC_DeInit();
    
  RCC_HSICmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
  
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
  
  RCC_HSEConfig(RCC_HSE_OFF);
  RCC_LSEConfig(RCC_LSE_OFF);
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz
  RCC_PLLCmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  RCC_PCLK2Config(RCC_HCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  while(RCC_GetSYSCLKSource() != 0x08);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);//关蜂鸣器
}
/*GPIO初始化*/
void GPIO_INIT()
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);//使能PC,PA的时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//要使用PC0到PC7
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化PC
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//要使用PA1,PA2,PA3
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA
}
/*延时函数 微秒*/
void delay_us(u32 n)
{
	u8 j;
	while(n--)
	for(j=0;j<10;j++);
}
/*延时函数 毫秒*/
void  delay_ms(u32 n)
{
	while(n--)
	delay_us(1000);
}

/*点亮LED与RGB的函数*/
void func(void)
{
			GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);//RGB全部熄灭

	while(1)
		{
		  GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//LED全部熄灭
			delay_ms(100);
			
			GPIO_ResetBits(GPIOC,GPIO_Pin_3);//点亮D4		
			delay_ms(100);			
			GPIO_SetBits(GPIOC,GPIO_Pin_3);//熄灭D4

			GPIO_ResetBits(GPIOC,GPIO_Pin_2);//点亮D3
    	                  delay_ms(100);	
			GPIO_SetBits(GPIOC,GPIO_Pin_2);//熄灭D3
		
			GPIO_ResetBits(GPIOC,GPIO_Pin_1);//点亮D2
			delay_ms(100);
			GPIO_SetBits(GPIOC,GPIO_Pin_1);//熄灭D2
			
			GPIO_ResetBits(GPIOC,GPIO_Pin_0);//点亮D1
			delay_ms(100);
			GPIO_SetBits(GPIOC,GPIO_Pin_0);//熄灭D1
			
			GPIO_ResetBits(GPIOC,GPIO_Pin_7);//点亮D8
			delay_ms(100);
			GPIO_SetBits(GPIOC,GPIO_Pin_7);//熄灭D8
			
			GPIO_ResetBits(GPIOC,GPIO_Pin_6);//点亮D7
			delay_ms(100);
			GPIO_SetBits(GPIOC,GPIO_Pin_6);//熄灭D7

			GPIO_ResetBits(GPIOC,GPIO_Pin_5);//点亮D6
			delay_ms(100);
			GPIO_SetBits(GPIOC,GPIO_Pin_5);//熄灭D6

			GPIO_ResetBits(GPIOC,GPIO_Pin_4);//点亮D5
			delay_ms(100);
			GPIO_SetBits(GPIOC,GPIO_Pin_4);//熄灭D5

/*RGB蓝红绿紫靛黄*/
			
			GPIO_ResetBits(GPIOA,GPIO_Pin_1);//蓝
			delay_ms(200);
			GPIO_SetBits(GPIOA,GPIO_Pin_1);
			
			GPIO_ResetBits(GPIOA,GPIO_Pin_2);//红
			delay_ms(200);
			GPIO_SetBits(GPIOA,GPIO_Pin_2);

			GPIO_ResetBits(GPIOA,GPIO_Pin_3);//绿
			delay_ms(200);
			GPIO_SetBits(GPIOA,GPIO_Pin_3);
			
			GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);//紫 
			delay_ms(200);	
			GPIO_SetBits(GPIOA,GPIO_Pin_2);			
			
			GPIO_ResetBits(GPIOA,GPIO_Pin_3);//靛
			delay_ms(200);
			GPIO_SetBits(GPIOA,GPIO_Pin_1);
			
			GPIO_ResetBits(GPIOA,GPIO_Pin_2);//黄
			delay_ms(200);
			
			GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);//RGB全部熄灭
					}
}
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main(void)
{ 
	RCC_Configuration();
	GPIO_INIT();
	func();
}  


 代码应该还可以更精简。最近作业多,今天先做到这里,等我想到好方法再发帖~~

 对了,还有一件事,童鞋们不要盲目抄袭以上代码哟~


菜鸟
2014-10-21 16:15:22     打赏
8楼
多点Z字  顺序变一下就好了吧,,我看到我那丢失的焊盘好桑心。。。

菜鸟
2014-10-27 08:22:55     打赏
9楼

LED&RGB (用位操作实现

 
视频地址:http://player.youku.com/player.php/sid/XODEyMjM1NTky/v.swf

 

#include "stm32f10x.h"
#include "stm32_eval.h"
GPIO_InitTypeDef GPIO_InitStructure;

void RCC_Configuration(void)
{
  RCC_DeInit();
    
  RCC_HSICmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
  
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
  
  RCC_HSEConfig(RCC_HSE_OFF);
  RCC_LSEConfig(RCC_LSE_OFF);
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz
  RCC_PLLCmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  RCC_PCLK2Config(RCC_HCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  while(RCC_GetSYSCLKSource() != 0x08);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);//1?·??ù?÷
}
void GPIO_INIT()
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);//òa????PC,PA
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//òaê1ó?PC0µ?PC7
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//í?íìê?3?
  GPIO_Init(GPIOC, &GPIO_InitStructure);//3?ê??¯PC
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//òaê1ó?PA1,PA2,PA3
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//í?íìê?3?
	GPIO_Init(GPIOA, &GPIO_InitStructure);//3?ê??¯PA
}

void func(void)
{
	 int i,j;
        while(1)
        {
					GPIO_SetBits(GPIOC,0x000000ff);//LED全部熄灭
					GPIO_SetBits(GPIOA,0x0000000e);//RGB全部熄灭
					i=0x00000010;//给i赋一个右移前的值
          for(j=1;j<=4;j++)//LED D4-D1通过i右移4次依次点亮
          {
						i>>=1;右移一位
						GPIO_ResetBits(GPIOC,i);//PC3-PC0 D4-D1			
            delay_ms(200);
						GPIO_SetBits(GPIOC,i);//依次熄灭
          }
					i=0x00000100;//给i赋一个右移前的值
					for(j=1;j<=4;j++)//LED D8-D5通过i右移4次依次点亮
					{
						i>>=1;//右移一位
						GPIO_ResetBits(GPIOC,i); 	//PC7-PC4 D8-D5
						delay_ms(200);
						GPIO_SetBits(GPIOC,i);//依次熄灭
          }
					i=0x00000001;
					for(j=1;j<=3;j++)//RGB三基色通过左移3次实现依次点亮,下面的混合色的颜色顺序我不写了。。
					{
						i<<=1;//左移一位
						GPIO_ResetBits(GPIOA,i); 	//
						delay_ms(200);
						GPIO_SetBits(GPIOA,i);
						
						GPIO_ResetBits(GPIOA,0x00000006); 	//
						delay_ms(200);
						GPIO_SetBits(GPIOA,0x00000006);
						
						GPIO_ResetBits(GPIOA,0x0000000a); 	//
						delay_ms(200);
						GPIO_SetBits(GPIOA,0x0000000a);
						
						GPIO_ResetBits(GPIOA,0x0000000c); 	//
						delay_ms(200);
						GPIO_SetBits(GPIOA,0x0000000c);
          } 
        }
}
int main(void)
{ 
	RCC_Configuration();
	GPIO_INIT();
	func();
}

 

 

 

顺便说说这次的作业。。。我想不用switch的写法来做按键计数和动态扫描显示。

用if else,for写好了(35#),100多行,比较简短。


菜鸟
2014-10-27 12:52:52     打赏
10楼
我已经意识到递归要慎用了。。。昨天搞的那个递归让内存溢出了

共40条 1/4 1 2 3 4 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]