这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » 【12.5】更新26---stm32学习进程

共8条 1/1 1 跳转至

【12.5】更新26---stm32学习进程

菜鸟
2015-10-19 20:53:22     打赏

第一次作业——Keil uVision4安装http://forum.eepw.com.cn/thread/277134/1#5

第二次作业——流水灯http://forum.eepw.com.cn/thread/277134/1#2

第三次作业——0-99按键计数http://forum.eepw.com.cn/thread/277134/1#3

第四次作业——uart控制LED流水灯转速http://forum.eepw.com.cn/thread/277134/1#4

第五次作业——定时器控制led灯http://forum.eepw.com.cn/thread/277134/1#6

第六次作业——计算机开放次数http://forum.eepw.com.cn/thread/277134/1#7

第七次作业——DS18B02改变灯的颜色http://forum.eepw.com.cn/thread/277134/1#8



菜鸟
2015-12-05 22:56:34     打赏
2楼

第二次作业 流水灯

#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);
}
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);
}

int main(void)
{ unsigned char flag=0;
RCC_Configuration();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOC, &GPIO_InitStructure);
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;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0);
GPIO_SetBits(GPIOC,GPIO_Pin_1);
GPIO_SetBits(GPIOC,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_3);
GPIO_SetBits(GPIOC,GPIO_Pin_4);
GPIO_SetBits(GPIOC,GPIO_Pin_5);
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);

 
 delay_ms(100);
    GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_0);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
delay_ms(100);
    GPIO_SetBits(GPIOC,GPIO_Pin_1);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_2);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_3);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_4);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_4);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_5);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_6);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
delay_ms(100);
}
}


菜鸟
2015-12-05 22:58:21     打赏
3楼

第三次作业 -----0—99计数

#include "stm32f10x.h"  
#include "stm32_eval.h"  
#include "stdbool.h"  
GPIO_InitTypeDef GPIO_InitStructure;  
 void RCC_Configuration(void);   
void GPIO_INIT(void) ;  
void Function(void) ;  
  
int main(void)     
{      
    RCC_Configuration();     
    GPIO_INIT();  
    Function();     
}      
     
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); 
  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);  
}  
  
void GPIO_INIT()     
{     
   //GPIO数码管初始化  
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8
|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOB, &GPIO_InitStructure);     
         
  //按键初始化 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     
  GPIO_Init(GPIOC, &GPIO_InitStructure);     
}     
  
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);  
}  
  void Function(void)   
{       
        int i=0,j=0;           
  
        GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);       
        delay_ms(50);       
  
        while(1)    
        {                   
                GPIO_SetBits(GPIOB,GPIO_Pin_1);             
                Number(i);                                    
                delay_ms(50);                              
                GPIO_ResetBits(GPIOB,GPIO_Pin_1);                 
                GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);    
  
                GPIO_SetBits(GPIOB,GPIO_Pin_15);             
                Number(j);      
                delay_ms(50);    
                GPIO_ResetBits(GPIOB,GPIO_Pin_15);            
                GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);    
  
                if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))       
                {       
                    delay_ms(50);              
                    if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)) 
                    {     
                        i++;                     
                        if(i==10)       
                        {    
                            j++;                 
                            i=0;                   
                        }  
                        if(j==10)  
                        {  
                             j=0;  
                                                 i=0;  
                        }  
                    }  
                }     
              }
}


菜鸟
2015-12-05 23:00:14     打赏
4楼

第四次作业 ——uart控制LED流水灯转速

#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);
}

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);
}
int main(void)
{  
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
 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;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
 
 
 while(1)
 {
  GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  delay_ms(100);
  GPIO_SetBits(GPIOC,GPIO_Pin_0);
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
   delay_ms(100);
  GPIO_SetBits(GPIOC,GPIO_Pin_1);
  GPIO_ResetBits(GPIOC,GPIO_Pin_2);
   delay_ms(100);
    GPIO_SetBits(GPIOC,GPIO_Pin_2);
  GPIO_ResetBits(GPIOC,GPIO_Pin_3);
   delay_ms(100);
    GPIO_SetBits(GPIOC,GPIO_Pin_3);
  GPIO_ResetBits(GPIOC,GPIO_Pin_4);
   delay_ms(100);
    GPIO_SetBits(GPIOC,GPIO_Pin_4);
  GPIO_ResetBits(GPIOC,GPIO_Pin_5);
   delay_ms(100);
    GPIO_SetBits(GPIOC,GPIO_Pin_5);
  GPIO_ResetBits(GPIOC,GPIO_Pin_6);
   delay_ms(100);
    GPIO_SetBits(GPIOC,GPIO_Pin_6);
  GPIO_ResetBits(GPIOC,GPIO_Pin_7);
   delay_ms(100);
    GPIO_SetBits(GPIOC,GPIO_Pin_7);
}
}


菜鸟
2015-12-05 23:11:03     打赏
5楼

第一次作业——Keil uVision4安装

一、打开安装

二、然后next



三、安装完成,打开license mangement并且复制cid

四、打开“和谐”软件,粘贴刚刚复制好的cid

五、狂点Generate  ,把生成的一坨东西复制

六、回到license mangement,把上一步生成的那坨东西粘贴到相应的位置,单击Add LIC,接下来就破解成功了。。。。。


菜鸟
2016-01-19 01:45:45     打赏
6楼

作业五:定时器控制LED灯

#include "stm32f10x.h"
#include "stm32_eval.h"
#include
/** @addtogroup STM32F10x_StdPeriph_Examples
* @{
*/

/** @addtogroup EXTI_Config
* @{
*/

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
EXTI_InitTypeDef   EXTI_InitStructure;
GPIO_InitTypeDef   GPIO_InitStructure;
NVIC_InitTypeDef   NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
int count=0;

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);
*/
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
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);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
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;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
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);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
}

void USART_int(long BaudRate)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* PA10 USART1_Rx  */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* USARTx configured as follow:
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = BaudRate;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_ClockInit(USART1, &USART_ClockInitStructure);
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
}

void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

/* Enable the TIM2 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f10x_xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f10x.c file
*/

/* System Clocks Configuration */
RCC_Configuration();

NVIC_Configuration();
//USART_int(115200);
//  printf("config done...\r\n");

/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 36000;
TIM_TimeBaseStructure.TIM_Prescaler = 100;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );

/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);

while (1){
//if(flag == 1)
//  {printf("TIM2 interrupt......\r\n");
//flag = 0;
}
//else{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);}
//}
}

void TIM2_IRQHandler(void) //TIM3
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update );
//  flag = ~flag;
//  if(flag){
//  GPIO_SetBits(GPIOC,GPIO_Pin_1);}
//  else {GPIO_ResetBits(GPIOC,GPIO_Pin_1);}
/*flag++;
if(flag == 50)
{led = ~led;
flag = 0;}
if(led){
GPIO_SetBits(GPIOC,GPIO_Pin_1);}
else {GPIO_ResetBits(GPIOC,GPIO_Pin_1);}*/
count++;
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);
if(count==1)
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
if(count==2)
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
if(count==3)
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
if(count==4)
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
if(count==5)
GPIO_ResetBits(GPIOC,GPIO_Pin_4);
if(count==6)
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
if(count==7)
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
if(count==8)
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
if(count==9)
count=0;
}
}

#ifdef  USE_FULL_ASSERT
/**
* @brief  Reports the name of the source file and the source line number
*         where the assert_param error has occurred.
* @param  file: pointer to the source file name
* @param  line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}
#endif
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(EVAL_COM1, (uint8_t) ch);

/* Loop until the end of transmission */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
{}

return ch;
}

#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}

#endif


菜鸟
2016-01-19 01:48:32     打赏
7楼

作业六:计算机开机次数

sfr IAP_DATA     = 0xE2;

sfr IAP_ADDRH     = 0xE3;
sfr IAP_ADDRL     = 0xE4;
sfr IAP_CMD      = 0xE5;
sfr IAP_TRIG     = 0xE6;
sfr IAP_CONTR     = 0xE7;

#define           CMD_IDLE  0
#define           CMD_READ   1
#define           CMD_PROGRAM   2
#define           CMD_ERASE   3 

#define     ENABLE_IAP0x80 
#define     ENABLE_IAP0x81 
#define     ENABLE_IAP0x82
#define     ENABLE_IAP0x83 

IAP_ADDRESS    0x2000    //STC90C52ϵÁÐEEPROM²âÊÔÆðʼµØÖ·

void IapIdle(void)
{
IAP_CONTR=0;
IAP_CMD =0;
IAP_TRIG =0;
IAP_ADDRH=0x80;
IAP_ADDRL =0;

}

unsigned char IapReadByte(unsigned int addt) 
{
unsigned char dat;
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_READ;
IAP_ADDRL=addr;
IAP_ADDRL=addr>>8
IAP_TRIG =0x46;
IAP_TRIG =0xb9;
dat = IAP_DATA;
IapIdle();


return dat;

}

void Iap ProgramByte(unsigned int addr,unsigned char dat )
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_REOGRAM;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8
IAP_DATA=date;
IAP_TRIG =0x46;
IAP_TRIG =0xb9;

IapIdle();
}

void Iap EraseSector(unsigned int addr )
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_ERASE;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8
IAP_TRIG =0x46;
IAP_TRIG =0xb9;

IapIdle();
}
unsigned char Num=0;
void main(void)
{
unsigned long i=0;
Num = Iap ReadByte(IAP_ADDRESS+20);
Num++;
Iap EraseSector(IAP_ADDRESS);
Iap ProgramByte(IAP_ADDRESS+20,Num);
for(i=0;i
{
LED0=0;
DelayMs(100);
LED0=1;
DelayMs(100);
}
while(1);
}


菜鸟
2016-01-25 22:50:42     打赏
8楼

第七次作业——DS18B02改变灯的颜色

  1. #include "stdio.h"    
  2. #include "stm32f10x.h"    
  3. int fputc(int ch,FILE *f);    
  4.         
  5. void RCC_Configuration(void)        
  6. {    
  7.       
  8.     GPIO_InitTypeDef  GPIO_InitStructure;    
  9.     ErrorStatus HSEStartUpStatus;    
  10.     RCC_DeInit();            
  11.     RCC_HSEConfig(RCC_HSE_ON);    
  12.   HSEStartUpStatus = RCC_WaitForHSEStartUp();     
  13.   if(HSEStartUpStatus==SUCCESS)    
  14.     {    
  15.         RCC_HCLKConfig(RCC_SYSCLK_Div1);    
  16.         RCC_PCLK1Config(RCC_HCLK_Div2);  
  17.         RCC_PCLK2Config(RCC_HCLK_Div1);  
  18.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//设置PLL输入时钟源8x9=72M    
  19.         RCC_PLLCmd(ENABLE);//打开PLL:              
  20.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);    
  21.         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);   
  22.         while(RCC_GetSYSCLKSource() != 0x08);     
  23.     }    
  24.                                                             
  25.     GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);  
  26.         
  27.     //蜂鸣器       
  28.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);    
  29.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    
  30.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;        // 关闭蜂鸣器    
  31.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //输出速     
  32.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //输入输出模      
  33.     GPIO_Init(GPIOD, &GPIO_InitStructure);          
  34.     GPIO_ResetBits(GPIOD,GPIO_Pin_2);    
  35.         
  36. }       
  37.     
  38. void delay_us(u32 n)            
  39. {       
  40.     u8 j;       
  41.     while(n--)       
  42.             for(j=0;j<10;j++);       
  43. }        
  44. void  delay_ms(u32 n)          
  45. {       
  46.    while(n--)       
  47.    delay_us(1000);       
  48. }    
  49.     
  50.       
  51. void GPIO_Inits(void)    
  52. {      
  53.         GPIO_InitTypeDef  GPIO_InitStructure;    
  54.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    
  55.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    
  56.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    
  57.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);    
  58.            
  59.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;    
  60.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;    
  61.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;     
  62.         GPIO_Init(GPIOA,&GPIO_InitStructure);    
  63.         GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3)        
  64.             
  65. }    
  66.     
  67. /**************************DS18B20**********************/    
  68.     
  69. uint8_t DS18B20_Init(void)    
  70. {    
  71.     GPIO_InitTypeDef GPIO_InitStructure;    
  72.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    
  73.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;    
  74.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  75.   GPIO_Init(GPIOC, &GPIO_InitStructure);    
  76.     Set_B20();    
  77.     
  78.     DS18B20_Rst();    
  79.     return DS18B20_Presence ();    
  80. }    
  81.     
  82. static void DS18B20_Mode_IPU(void)    
  83. {    
  84.       GPIO_InitTypeDef GPIO_InitStructure;    
  85.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    
  86.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;    
  87.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    
  88.   GPIO_Init(GPIOC, &GPIO_InitStructure);    
  89. }    
  90.     
  91. static void DS18B20_Mode_Out_PP(void)    
  92. {    
  93.     GPIO_InitTypeDef GPIO_InitStructure;    
  94.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    
  95.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;    
  96.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  97.   GPIO_Init(GPIOC, &GPIO_InitStructure);    
  98. }    
  99.     
  100. static void DS18B20_Rst(void)    
  101. {    
  102.     //主机设置为输出     
  103.     DS18B20_Mode_Out_PP();    
  104.     Reset_B20() ;    
  105.     delay_us(700);     
  106.     Set_B20()   ;    
  107.     delay_us(15);    
  108. }    
  109.     
  110. static uint8_t DS18B20_Presence(void)    
  111. {    
  112.     uint8_t pulse_time = 0;    
  113.         
  114.     //主机设置为上拉输入  
  115.     DS18B20_Mode_IPU();    
  116.         
  117.    while( Read_B20() && pulse_time<100 )    
  118.     {    
  119.         pulse_time++;    
  120.         delay_us(1);    
  121.     }       
  122.    
  123.     if( pulse_time >=100 )    
  124.         return 1;    
  125.     else    
  126.         pulse_time = 0;    
  127.    
  128.     while( !Read_B20() && pulse_time<240 )    
  129.     {    
  130.         pulse_time++;    
  131.         delay_us(1);    
  132.     }       
  133.     if( pulse_time >=240 )    
  134.         return 1;    
  135.     else    
  136.         return 0;    
  137. }    
  138.     
  139. static uint8_t DS18B20_ReadBit(void)    
  140. {    
  141.     uint8_t dat;    
  142.         
  143.     //读0和读1的时间大于60us      
  144.     DS18B20_Mode_Out_PP();    
  145.     Reset_B20();    
  146.     delay_us(10);    
  147.     DS18B20_Mode_IPU();        
  148.         
  149.     if( Read_B20() == SET )    
  150.         dat = 1;    
  151.     else    
  152.         dat = 0;    
  153.          
  154.     delay_us(45);    
  155.         
  156.     return dat;    
  157. }    
  158.     
  159. static uint8_t DS18B20_ReadByte(void)    
  160. {    
  161.     uint8_t i, j, dat = 0;      
  162.         
  163.     for(i=0; i<8; i++)     
  164.     {    
  165.         j = DS18B20_ReadBit();          
  166.         dat = (dat) | (j<<i);    
  167.     }    
  168.         
  169.     return dat;    
  170. }    
  171.     
  172. static void DS18B20_WriteByte(uint8_t dat)    
  173. {    
  174.     uint8_t i, testb;    
  175.     DS18B20_Mode_Out_PP();    
  176.         
  177.     for( i=0; i<8; i++ )    
  178.     {    
  179.         testb = dat&0x01;    
  180.         dat = dat>>1;         
  181.         //写0和写1的时间大于60us    
  182.         if (testb)    
  183.         {               
  184.             Reset_B20();    
  185.         
  186.             delay_us(8);    
  187.                 
  188.             Set_B20();    
  189.             delay_us(58);    
  190.         }           
  191.         else    
  192.         {               
  193.             Reset_B20();    
  194.             
  195.             delay_us(70);    
  196.                 
  197.             Set_B20();              
  198.             delay_us(2);    
  199.         }    
  200.     }    
  201. }    
  202.     
  203. static void DS18B20_SkipRom ( void )    
  204. {    
  205.     DS18B20_Rst();         
  206.         
  207.     DS18B20_Presence();      
  208.         
  209.     DS18B20_WriteByte(0XCC);           
  210.         
  211. }    
  212.     
  213. static void DS18B20_MatchRom ( void )    
  214. {    
  215.     DS18B20_Rst();         
  216.         
  217.     DS18B20_Presence();      
  218.         
  219.     DS18B20_WriteByte(0X55);            
  220.         
  221. }    
  222.     
  223. float DS18B20_GetTemp_SkipRom ( void )    
  224. {    
  225.     uint8_t tpmsb, tplsb;    
  226.     short s_tem;    
  227.     float f_tem;    
  228.         
  229.         
  230.     DS18B20_SkipRom ();    
  231.     DS18B20_WriteByte(0X44);         //开始转换    
  232.         
  233.         
  234.     DS18B20_SkipRom ();    
  235.   DS18B20_WriteByte(0XBE);          // 读温度值   
  236.         
  237.     tplsb = DS18B20_ReadByte();          
  238.     tpmsb = DS18B20_ReadByte();     
  239.         
  240.         
  241.     s_tem = tpmsb<<8;    
  242.     s_tem = s_tem | tplsb;    
  243.         
  244.     if( s_tem < 0 )      //负温度     
  245.         f_tem = (~s_tem+1) * 0.0625;        
  246.     else    
  247.         f_tem = s_tem * 0.0625;    
  248.         
  249.     return f_tem;       
  250.         
  251.         
  252. }    
  253.     
  254.     
  255.     
  256. void DS18B20_ReadId ( uint8_t * ds18b20_id )    
  257. {    
  258.     uint8_t uc;    
  259.         
  260.         
  261.     DS18B20_WriteByte(0x33);       //读取序列号    
  262.         
  263.     for ( uc = 0; uc < 8; uc ++ )    
  264.       ds18b20_id [ uc ] = DS18B20_ReadByte();    
  265.         
  266. }    
  267.     
  268.     
  269. float DS18B20_GetTemp_MatchRom ( uint8_t * ds18b20_id )    
  270. {    
  271.     uint8_t tpmsb, tplsb, i;    
  272.     short s_tem;    
  273.     float f_tem;    
  274.         
  275.         
  276.     DS18B20_MatchRom ();            //匹配ROM    
  277.         
  278.   for(i=0;i<8;i++)    
  279.         DS18B20_WriteByte ( ds18b20_id [ i ] );     
  280.         
  281.     DS18B20_WriteByte(0X44);                //开始转换     
  282.     
  283.         
  284.     DS18B20_MatchRom ();            //匹配ROM    
  285.         
  286.     for(i=0;i<8;i++)    
  287.         DS18B20_WriteByte ( ds18b20_id [ i ] );     
  288.         
  289.     DS18B20_WriteByte(0XBE);                // 读温度值    
  290.         
  291.     tplsb = DS18B20_ReadByte();          
  292.     tpmsb = DS18B20_ReadByte();     
  293.         
  294.         
  295.     s_tem = tpmsb<<8;    
  296.     s_tem = s_tem | tplsb;    
  297.         
  298.     if( s_tem < 0 )      //负温度 
  299.         f_tem = (~s_tem+1) * 0.0625;        
  300.     else    
  301.         f_tem = s_tem * 0.0625;    
  302.         
  303.     return f_tem;       
  304.         
  305.         
  306. }    
  307.     
  308.     
  309.     
  310.     
  311.     
  312. int main()    
  313. {      
  314. uint8_t uc, ucDs18b20Id [ 8 ];    
  315. RCC_Configuration();    
  316. GPIO_Inits();    
  317. USART_int(9600);    
  318. while( DS18B20_Init() )     
  319. printf("\r\n no ds18b20 exit \r\n");    
  320.     
  321. printf("\r\n Yes ds18b20 \r\n");    
  322.     
  323. DS18B20_ReadId ( ucDs18b20Id  );           // 读取 DS18B20 的序列号    
  324.     
  325. printf("\r\nDS18B20的序列号是: 0x");    
  326.     
  327. for ( uc = 0; uc < 8; uc ++ )             // 打印 DS18B20 的序列号    
  328. printf ( "%.2x", ucDs18b20Id [ uc ] );    
  329.     
  330.     
  331. for(;;)    
  332. {       
  333. static unsigned int i=0;    
  334. float a,b;    
  335. if(i==10)    
  336. {    
  337. printf ( "\r\n第10秒:温度: %.1f\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) );       // 打印通过 DS18B20 序列号获取的温度值             
  338. a=DS18B20_GetTemp_MatchRom ( ucDs18b20Id );    
  339. delay_ms(1000);     //1s 读取一次温度值   
  340. i++;    
  341. }    
  342. else{}    
  343. if(i<10)    
  344. {    
  345. printf ( "\r\n温度: %.1f\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) );        // 打印通过 DS18B20 序列号获取的温度值             
  346. delay_ms(1000);     //1s 读取一次温度值     
  347. i++;    
  348. }    
  349. if(i>10)    
  350. {    
  351. printf ( "\r\n10秒后:温度: %.1f\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) );       // 打印通过 DS18B20 序列号获取的温度值             
  352. b=DS18B20_GetTemp_MatchRom ( ucDs18b20Id );    
  353. delay_ms(1000);     // 1s 读取一次温度值    
  354. i++;    
  355. if((b-a)>0.9)    
  356. {GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);    
  357.     
  358. }    
  359. else{}    
  360. if((b-a)<0.9)    
  361. {    
  362.         GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);    
  363.     
  364.     
  365. }    
  366. else{}    
  367.     
  368. }    
  369. else{}    
  370.     
  371. }       
  372. }    
  373. int fputc(int ch,FILE *f)    
  374. {    
  375. USART_SendData(USART1, (uint8_t) ch);    
  376. while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)    
  377. {}    
  378. return ch;    
  379. }    


共8条 1/1 1 跳转至

回复

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