iwdg.c
#include "iwdg.h"
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //ʹÄܶԼĴæÆ÷IWDG_PRºÍIWDG_RLRµÄд²Ù×÷
IWDG_SetPrescaler(prer); //ÉèÖÃIWDGÔ¤·ÖƵֵ:ÉèÖÃIWDGÔ¤·ÖƵֵΪ64
IWDG_SetReload(rlr); //ÉèÖÃIWDGÖØ×°ÔØÖµ
IWDG_ReloadCounter(); //°´ÕÕIWDGÖØ×°ÔØ¼Ä´æÆ÷µÄÖµÖØ×°ÔØIWDG¼ÆÊýÆ÷
IWDG_Enable(); //ʹÄÜIWDG
}
//ι¶ÀÁ¢¿´ÃŹ·
void IWDG_Feed(void)
{
IWDG_ReloadCounter();
}
iwdg.h
#ifndef __WDG_H
#define __WDG_H
#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////
//±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ;
//Mini STM32¿ª·¢°å
//¿´ÃŹ· Çý¶¯´úÂë
//ÕýµãÔ×Ó@ALIENTEK
//¼¼ÊõÂÛ̳:www.openedv.com
//ÐÞ¸ÄÈÕÆÚ:2010/5/30
//°æ±¾£ºV1.0
//°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£
//Copyright(C) ÕýµãÔ×Ó 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
void IWDG_Init(u8 prer,u16 rlr);
void IWDG_Feed(void);
#endif
stm32f10x_it.c
#include "stm32f10x_it.h"
#include "delay.h"
#include"stdlib.h"
#include"string.h"
extern __IO int value_1;
extern __IO int value_2;
extern __IO int value_3;
extern __IO int value_4;
extern __IO int value_5;
extern float angle;
uint8_t temp[40],TEMP[40];
u8 counter1=0;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/******************************************************************************/
/* Cortex-M3 Processor Exceptions Handlers */
/******************************************************************************/
void USART2_IRQHandler(void) //´®¿Ú2È«¾ÖÖжϷþÎñº¯Êý
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //½ÓÊÕÖжÏÓÐЧ,Èô½ÓÊÕÊý¾Ý¼Ä´æÆ÷Âú
{
temp[counter1] = USART_ReceiveData(USART2); //½ÓÊÕÊý¾Ý
if(counter1 == 0 && temp[0]!=0x68) return; //counter1 == 0&&temp[0]=0x68 悦﵀
counter1++;
if(counter1==40) //½ÓÊÕµ½n¸öÊý¾Ý
{
counter1=0; //ÖØÐ¸³Öµ£¬×¼±¸ÏÂÒ»Ö¡Êý¾ÝµÄ½ÓÊÕ
memcpy(TEMP,temp,40);
//printf("%s\r\n",TEMP);
}
}
}
/**
* @}
*/
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
stm32f10x_it.h
/**
******************************************************************************
* @file GPIO/IOToggle/stm32f10x_it.h
* @author MCD Application Team
* @version V3.5.0
* @date 08-April-2011
* @brief This file contains the headers of the interrupt handlers.
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_IT_H
#define __STM32F10x_IT_H
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void NMI_Handler(void);
void HardFault_Handler(void);
void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
#endif /* __STM32F10x_IT_H */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
time.c
#include "time.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPA,PD¶Ë¿ÚʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 ¶Ë¿ÚÅäÖÃ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 Êä³ö¸ß
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
// GPIO_Init(GPIOD, &GPIO_InitStructure); //ÍÆÍìÊä³ö £¬IO¿ÚËÙ¶ÈΪ50MHz
// GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 Êä³ö¸ß
//GPIO_ResetBits(GPIOA,GPIO_Pin_8);
// GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}
/****************************
**TIM2µÄͨµÀ1ʹÓõ¥Âö³åģʽ
**TIM3ʹÓÃÃÅ¿ØÄ£Ê½ÓÃÀ´Êä³öPWM
**
****************************/
//TIM2per:֨װֵ
//Compare1:±È½Ï²¶»ñ1µÄÔ¤×°ÔØÖµ
void Motor_Init(u16 TIM2per, u16 TIM3per, u16 TIM3Compare1)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//ʹÄܶ¨Ê±Æ÷2µÄʱÖÓ
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//ʹÄܶ¨Ê±Æ÷3µÄʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ʹÄÜGPIOAʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ʹÄܸ´ÓÃIOʱÖÓ
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//¸´ÓÃÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_6;//PA6
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
//TIM2¹¤×÷ÔÚµ¥Âö³åÏÂ
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//ûÓÐʱÖÓ·Ö¸î
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//ÏòÉϼÆÊýģʽ
TIM_TimeBaseInitStruct.TIM_Prescaler = 7199;//Ô¤·ÖƵֵ,ÿ100us¼ÆÊýÒ»´Î
TIM_TimeBaseInitStruct.TIM_Period = TIM2per;//֨װֵ
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//ÉèÖÃTIM2ÔÚµ¥Âö³åģʽ£¬ÇÒÊǵ¥Ò»µÄÂö³å£¬ÔÚÏÂÒ»¸ö¸üÐÂʼþÍ£Ö¹
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);//ʹÄܶ¨Ê±Æ÷2µÄͨµÀ1Ô¤×°ÔØ¼Ä´æÆ÷
TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref);
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//ÔÚÏòÉϼÆÊýʱ£¬Ò»µ©TIMx_CNT<TIMx_CCR1ʱͨµÀ1ΪÎÞЧµçƽ£¬·ñÔòΪÓÐЧµçƽ
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1Êä³öʹÄÜ
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//ÓÐЧµçƽΪ¸ß
TIM_OCInitStruct.TIM_Pulse = 1;//±È½Ï²¶»ñ1µÄÔ¤×°ÔØÖµ
TIM_OC1Init(TIM2,&TIM_OCInitStruct);
TIM_Cmd(TIM2,DISABLE);//ÏȲ»Ê¹ÄÜÄÜTIM2
//TIM3¹¤×÷ÔÚ´ÓģʽµÄÃÅ¿ØÄ£Ê½ÏµÄPWMÊä³öģʽ
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//ûÓÐʱÖÓ·Ö¸î
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//ÏòÉϼÆÊýģʽ
TIM_TimeBaseInitStruct.TIM_Prescaler = 719;//Ô¤·ÖƵֵ£¬10us¼ÆÊýÒ»´Î
TIM_TimeBaseInitStruct.TIM_Period = TIM3per;//֨װֵ
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);//TIM3ΪÃÅ¿ØÄ£Ê½
TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);//ʹÄÜTIM3µÄÖ÷´Óģʽ
TIM_SelectInputTrigger(TIM3,TIM_TS_ITR1);//ÄÚ²¿´¥·¢£¬´ÓTIM2´¥·¢
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//ÔÚÏòÉϼÆÊýʱ£¬Ò»µ©TIMx_CNT<TIMx_CCR1ʱͨµÀ1ΪÎÞЧµçƽ£¬·ñÔòΪÓÐЧµçƽ
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1Êä³öʹÄÜ
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//ÓÐЧµçƽΪ¸ß
TIM_OCInitStruct.TIM_Pulse = TIM3Compare1;//±È½Ï²¶»ñ1µÄÔ¤×°ÔØÖµ
TIM_OC1Init(TIM3,&TIM_OCInitStruct);
TIM_Cmd(TIM3,ENABLE);//ʹÄÜTIM3
}
//ÉèÖÃPWMµÄÊä³ö
//Cycle:ΪÖÜÆÚ,µ¥Î»(us)
//Pulse_Num:ΪÂö³å¸öÊý£¨Ð¡ÓÚ3200£©
void TIM2_TIM3_PWM(u16 Cycle, u16 Pulse_Num)
{
u16 TIM3per = 0;
u32 Time = 0;
//¸Ä±äTIM3µÄ֨װֵ¸Ä±äÂö³åƵÂÊÕâÀïÉèÖÃÂö³åÕ¼¿Õ±ÈΪ50%
//¸Ä±äTIM2µÄÔ¤·ÖƵÆ÷ºÍ֨װֵ¸Ä±äÂö³å¸öÊý
Time = Cycle * Pulse_Num;
Time /= 100; //Ô¤·ÖƵΪ7200,100us¼ÆÊýÒ»´Î
TIM3per = Cycle/10; //Ô¤·ÖƵΪ720,10us¼ÆÊýÒ»´Î
TIM_SetAutoreload(TIM2, Time+1);//ÉèÖÃTIM2µÄ֨װֵ
TIM_SetAutoreload(TIM3, TIM3per-1);//ÉèÖÃTIM3µÄ֨װֵ
TIM_SetCompare1(TIM3,TIM3per/2);//ÉèÖÃÕ¼¿Õ±ÈΪ50%
TIM_Cmd(TIM2,ENABLE);//ʹÄÜTIM2
}
void TIM1_PWM_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
/////////////////TIM1_CH4 PA11
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = 100; //ÉèÖÃ×Ô¶¯ÖØ×°ÔØÖµ
TIM_TimeBaseStructure.TIM_Prescaler =71; //ÉèÖÃÔ¤·ÖƵֵ
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable; //±È½ÏÊä³öʹÄÜ
TIM_OCInitStructure.TIM_Pulse = 0; //ÉèÖôý×°Èë²¶»ñ±È½Ï¼Ä´æÆ÷µÄÂö³åÖµ
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //Êä³ö¼«ÐÔ¸ß
TIM_OC4Init(TIM1, &TIM_OCInitStructure); //¢Û³õʼ»¯ÍâÉè TIMx
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_CtrlPWMOutputs(TIM1,ENABLE); //¢ÝMOE Ö÷Êä³öʹÄÜ
TIM_ARRPreloadConfig(TIM1, ENABLE); //ʹÄÜ TIMx ÔÚ ARR ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
TIM_Cmd(TIM1, ENABLE); //¢ÜʹÄÜ TIM1
}
// void TIM4_Init(u16 arr,u16 psc)/////////////////10ms¶¨Ê±Æ÷ ad²É¼¯
// {
// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //ʱÖÓʹÄÜ
//
// //¶¨Ê±Æ÷TIM4³õʼ»¯
// TIM_TimeBaseStructure.TIM_Period = arr; //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ
// TIM_TimeBaseStructure.TIM_Prescaler =psc; //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓÆµÂʳýÊýµÄÔ¤·ÖƵֵ
// TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòÉϼÆÊýģʽ
// TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»
//
// TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //ʹÄÜÖ¸¶¨µÄTIM2ÖжÏ,ÔÊÐí¸üÐÂÖжÏ
// //ÖжÏÓÅÏȼ¶NVICÉèÖÃ
// NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM3ÖжÏ
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÏÈÕ¼ÓÅÏȼ¶0¼¶
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //´ÓÓÅÏȼ¶3¼¶
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀ±»Ê¹ÄÜ
// NVIC_Init(&NVIC_InitStructure); //³õʼ»¯NVIC¼Ä´æÆ÷
// TIM_Cmd(TIM4, ENABLE); //ʹÄÜTIMx
// TIM_ClearFlag(TIM4, TIM_FLAG_Update);
// }
// void TIM4_Init(void)
// {
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
// GPIO_InitTypeDef GPIO_InitStructure;
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PE0
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PE0ÉèÖóÉÊäÈ룬±àÂëÆ÷²âËÙÐèÒªÉèÖÃΪÉÏÀ
// GPIO_Init(GPIOE, &GPIO_InitStructure);//³õʼ»¯GPIOE.0
// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_DeInit(TIM4);
// TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
// TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
// TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
// TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
// TIM_ETRClockMode2Config(TIM4, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
// TIM_SetCounter(TIM4, 0);
// TIM_Cmd(TIM4, ENABLE);
// }
//void TIM8_PWM_Init(void)
// {
//
// GPIO_InitTypeDef GPIO_InitStructure;
// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_OCInitTypeDef TIM_OCInitStructure;
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//
//
// GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
// GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
// GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
// GPIO_Init(GPIOC,&GPIO_InitStructure);
//
//
// TIM_TimeBaseStructure.TIM_Period = 1000; //ÉèÖÃ×Ô¶¯ÖØ×°ÔØÖµ
// TIM_TimeBaseStructure.TIM_Prescaler =7199; //ÉèÖÃÔ¤·ÖƵֵ
// TIM_TimeBaseStructure.TIM_ClockDivision = 0; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
// TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //
//
//
// TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
// TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable; //±È½ÏÊä³öʹÄÜ
// TIM_OCInitStructure.TIM_Pulse = 0; //ÉèÖôý×°Èë²¶»ñ±È½Ï¼Ä´æÆ÷µÄÂö³åÖµ
// TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //Êä³ö¼«ÐÔ¸ß
// TIM_OC1Init(TIM8, &TIM_OCInitStructure); //¢Û³õʼ»¯ÍâÉè TIMx
// TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);
//
// TIM_CtrlPWMOutputs(TIM8,ENABLE); //¢ÝMOE Ö÷Êä³öʹÄÜ
//
// TIM_ARRPreloadConfig(TIM8, ENABLE); //ʹÄÜ TIMx ÔÚ ARR ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
// TIM_Cmd(TIM8, ENABLE); //¢ÜʹÄÜ TIM8
// }
time.h
#ifndef _TIME_H_
#define _TIME_H_
#include "stm32f10x_tim.h"
void Motor_Init(u16 TIM2per, u16 TIM3per, u16 TIM3Compare1);
void TIM2_TIM3_PWM(u16 Cycle, u16 Pulse_Num);
void TIM1_PWM_Init(void);
void TIM8_PWM_Init(void);
//void TIM4_Init(void);
//void TIM4_Init(u16 arr,u16 psc);/////////////////10ms¶¨Ê±Æ÷ ad²É¼¯
void LED_Init(void);
#endif
usart.c
#include "sys.h"
#include "usart.h"
#include "string.h"
#if 1
#pragma import(__use_no_semihosting)
//±ê×¼¿âÐèÒªµÄÖ§³Öº¯Êý
struct __FILE
{
int handle;
};
FILE __stdout;
//¶¨Òå_sys_exit()ÒÔ±ÜÃâʹÓðëÖ÷»úģʽ
_sys_exit(int x)
{
x = x;
}
//ÖØ¶¨Òåfputcº¯Êý
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//Ñ»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
USART1->DR = (u8) ch;
return ch;
}
#endif
void USART1_Config(void) //Á¬½ÓÉÏλ»ú£¬´®¿Ú1³õʼ»¯
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
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_Init(USART1, &USART_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ; //ÇÀÕ¼ÓÅÏȼ¶ 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
USART_ClearFlag(USART1, USART_FLAG_TC); //Çå´®¿Ú1·¢ËͱêÖ¾
}
void USART2_Config(void) //Á¬½Ó´ó32µ¥Æ¬»ú ³õʼ»¯ ÅäÖÃUSART2
{
GPIO_InitTypeDef GPIO_InitStructure; //´®¿Ú¶Ë¿ÚÅäÖýṹÌå±äÁ¿
USART_InitTypeDef USART_InitStructure; //´®¿Ú²ÎÊýÅäÖýṹÌå±äÁ¿
NVIC_InitTypeDef NVIC_InitStructure;
//µÚ1²½£º´ò¿ªGPIOºÍUSART²¿¼þµÄʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //´ò¿ªGPIOAʱÖÓºÍGPIOA¸´ÓÃʱÖÓ
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //´ò¿ª´®¿Ú¸´ÓÃʱÖÓ
USART_DeInit(USART2); //¸´Î»´®¿Ú1
//µÚ2²½£º½«USART2 Tx£¨·¢Ëͽţ©µÄGPIOÅäÖÃÎªÍÆÍ츴ÓÃģʽ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //´®¿Ú2·¢ËͽÅ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Êä³öËÙ¶È50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯GPIOA
//µÚ3²½£º½«USART2 Rx£¨½ÓÊսţ©µÄGPIOÅäÖÃΪ¸¡¿ÕÊäÈëģʽ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //´®¿Ú2½ÓÊÕ½Å
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿ÕÊäÈë
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉÏÀÊäÈë
GPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯GPIOA
//µÚ4²½£ºÅäÖÃUSART1²ÎÊý
USART_InitStructure.USART_BaudRate = 9600; //²¨ÌØÂÊÉèÖãº57600
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Êý¾ÝλÊýÉèÖãº8λ
USART_InitStructure.USART_StopBits = USART_StopBits_1; //ֹͣλÉèÖãº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_Init(USART2, &USART_InitStructure); //³õʼ»¯USART2
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ; //ÇÀÕ¼ÓÅÏȼ¶ 3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×ÓÓÅÏȼ¶ 3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ ͨµÀʹÄÜ
NVIC_Init(&NVIC_InitStructure); //ÖжÏÓÅÏȼ¶³õʼ»¯
//´ò¿ª·¢ËÍÖжϺͽÓÊÕÖжÏ(Èç¹ûÐèÒªÖжÏ)
//USART_ITConfig(USART2, USART_IT_TXE, ENABLE); // ʹÄÜÖ¸¶¨µÄUSART1·¢ËÍÖÐ¶Ï £»
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // ʹÄÜÖ¸¶¨µÄUSART1½ÓÊÕÖÐ¶Ï £»
//µÚ5²½£ºÊ¹ÄÜ USART2£¬ ÅäÖÃÍê±Ï
USART_Cmd(USART2, ENABLE); //ʹÄÜ USART2
//ÈçÏÂÓï¾ä½â¾öµÚ1¸ö×Ö½ÚÎÞ·¨ÕýÈ··¢ËͳöÈ¥µÄÎÊÌâ
USART_ClearFlag(USART2, USART_FLAG_TC); //Çå´®¿Ú2·¢ËͱêÖ¾
}
void USART3_Config(void) //³õʼ»¯ ÅäÖÃUSART3 Arduino
{
GPIO_InitTypeDef GPIO_InitStructure; //´®¿Ú¶Ë¿ÚÅäÖýṹÌå±äÁ¿
USART_InitTypeDef USART_InitStructure; //´®¿Ú²ÎÊýÅäÖýṹÌå±äÁ¿
NVIC_InitTypeDef NVIC_InitStructure;
//
// //µÚ1²½£º´ò¿ªGPIOºÍUSART²¿¼þµÄʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //´ò¿ªGPIOʱÖÓºÍGPIO¸´ÓÃʱÖÓ
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //´ò¿ª´®¿Ú¸´ÓÃʱÖÓ
USART_DeInit(USART3); //¸´Î»´®¿Ú3
//µÚ2²½£º½«USART3 Tx£¨·¢Ëͽţ©µÄGPIOÅäÖÃÎªÍÆÍ츴ÓÃģʽ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //´®¿Ú3·¢ËͽÅ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Êä³öËÙ¶È50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //³õʼ»¯GPIOB
//
//µÚ3²½£º½«USART3 Rx£¨½ÓÊսţ©µÄGPIOÅäÖÃΪ¸¡¿ÕÊäÈëģʽ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //´®¿Ú3½ÓÊÕ½Å
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿ÕÊäÈë
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉÏÀÊäÈë
GPIO_Init(GPIOB, &GPIO_InitStructure); //³õʼ»¯GPIOB
//
//
//µÚ4²½£ºÅäÖÃUSART1²ÎÊý
USART_InitStructure.USART_BaudRate = 115200; //²¨ÌØÂÊÉèÖãº115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Êý¾ÝλÊýÉèÖãº8λ
USART_InitStructure.USART_StopBits = USART_StopBits_1; //ֹͣλÉèÖãº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_Init(USART3, &USART_InitStructure); //³õʼ»¯USART3
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //ÇÀÕ¼ÓÅÏȼ¶ 3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //×ÓÓÅÏȼ¶ 3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ ͨµÀʹÄÜ
NVIC_Init(&NVIC_InitStructure); //ÖжÏÓÅÏȼ¶³õʼ»¯
//
//´ò¿ª·¢ËÍÖжϺͽÓÊÕÖжÏ(Èç¹ûÐèÒªÖжÏ)
// //USART_ITConfig(USART3, USART_IT_TXE, ENABLE); // ʹÄÜÖ¸¶¨µÄUSART3·¢ËÍÖÐ¶Ï £»
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // ʹÄÜÖ¸¶¨µÄUSART3½ÓÊÕÖÐ¶Ï £»
//
// //µÚ5²½£ºÊ¹ÄÜ USART2£¬ ÅäÖÃÍê±Ï
USART_Cmd(USART3, DISABLE); //¹Ø±Õ USART3
//
//ÈçÏÂÓï¾ä½â¾öµÚ1¸ö×Ö½ÚÎÞ·¨ÕýÈ··¢ËͳöÈ¥µÄÎÊÌâ
USART_ClearFlag(USART3, USART_FLAG_TC); //Çå´®¿Ú3·¢ËͱêÖ¾
}
//
//void UART4_Config(void) //³õʼ»¯ ÅäÖÃUART4 Á¬½Ómini stm32
//{
// GPIO_InitTypeDef GPIO_InitStructure; //´®¿Ú¶Ë¿ÚÅäÖýṹÌå±äÁ¿
// USART_InitTypeDef USART_InitStructure; //´®¿Ú²ÎÊýÅäÖýṹÌå±äÁ¿
// NVIC_InitTypeDef NVIC_InitStructure;
//
// //µÚ1²½£º´ò¿ªGPIOºÍUSART²¿¼þµÄʱÖÓ
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //´ò¿ªGPIOCʱÖÓ
// //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //´ò¿ªGPIODʱÖÓ
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); //´ò¿ª´®¿Ú5¸´ÓÃʱÖÓ
// USART_DeInit(UART4); //¸´Î»´®¿Ú5
//
// //µÚ2²½£º½«UART4 Tx£¨·¢Ëͽţ©µÄGPIOÅäÖÃÎªÍÆÍ츴ÓÃģʽ
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //´®¿Ú5·¢ËͽÅ
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Êä³öËÙ¶È50MHz
// GPIO_Init(GPIOC, &GPIO_InitStructure); //³õʼ»¯GPIOA
//
// //µÚ3²½£º½«UART4 Rx£¨½ÓÊսţ©µÄGPIOÅäÖÃΪ¸¡¿ÕÊäÈëģʽ
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //´®¿Ú4½ÓÊÕ½Å
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿ÕÊäÈë
// //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉÏÀÊäÈë
// GPIO_Init(GPIOC, &GPIO_InitStructure); //³õʼ»¯GPIOD
//
//
// //µÚ4²½£ºÅäÖÃUSART4²ÎÊý
// USART_InitStructure.USART_BaudRate = 57600; //²¨ÌØÂÊÉèÖãº115200
// USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Êý¾ÝλÊýÉèÖãº8λ
// USART_InitStructure.USART_StopBits = USART_StopBits_1; //ֹͣλÉèÖãº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_Init(UART4, &USART_InitStructure); //³õʼ»¯USART2
// NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //ÇÀÕ¼ÓÅÏȼ¶ 3
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×ÓÓÅÏȼ¶ 3
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ ͨµÀʹÄÜ
// NVIC_Init(&NVIC_InitStructure); //ÖжÏÓÅÏȼ¶³õʼ»¯
//
// //´ò¿ª·¢ËÍÖжϺͽÓÊÕÖжÏ(Èç¹ûÐèÒªÖжÏ)
//
// //USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
//
// //µÚ5²½£ºÊ¹ÄÜ USART2£¬ ÅäÖÃÍê±Ï
// USART_Cmd(UART4, ENABLE); //ʹÄÜ UART4
//
// //ÈçÏÂÓï¾ä½â¾öµÚ1¸ö×Ö½ÚÎÞ·¨ÕýÈ··¢ËͳöÈ¥µÄÎÊÌâ
// USART_ClearFlag(UART4, USART_FLAG_TC); //Çå´®¿Ú4·¢ËͱêÖ¾
//
//}
//
//void UART5_Config(void) //³õʼ»¯ ÅäÖÃUSART5 µç×ÓÂÞ¾
//{
// GPIO_InitTypeDef GPIO_InitStructure; //´®¿Ú¶Ë¿ÚÅäÖýṹÌå±äÁ¿
// USART_InitTypeDef USART_InitStructure; //´®¿Ú²ÎÊýÅäÖýṹÌå±äÁ¿
// NVIC_InitTypeDef NVIC_InitStructure;
//
// //µÚ1²½£º´ò¿ªGPIOºÍUSART²¿¼þµÄʱÖÓ
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //´ò¿ªGPIOCʱÖÓ
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //´ò¿ªGPIODʱÖÓ
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE); //´ò¿ª´®¿Ú5¸´ÓÃʱÖÓ
// USART_DeInit(UART5); //¸´Î»´®¿Ú5
//
// //µÚ2²½£º½«UART5 Tx£¨·¢Ëͽţ©µÄGPIOÅäÖÃÎªÍÆÍ츴ÓÃģʽ
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //´®¿Ú5·¢ËͽÅ
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Êä³öËÙ¶È50MHz
// GPIO_Init(GPIOC, &GPIO_InitStructure); //³õʼ»¯GPIOA
//
// //µÚ3²½£º½«UART5 Rx£¨½ÓÊսţ©µÄGPIOÅäÖÃΪ¸¡¿ÕÊäÈëģʽ
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //´®¿Ú5½ÓÊÕ½Å
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿ÕÊäÈë
// //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉÏÀÊäÈë
// GPIO_Init(GPIOD, &GPIO_InitStructure); //³õʼ»¯GPIOD
//
//
// //µÚ4²½£ºÅäÖÃUSART5²ÎÊý
// USART_InitStructure.USART_BaudRate = 9600; //²¨ÌØÂÊÉèÖãº115200
// USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Êý¾ÝλÊýÉèÖãº8λ
// USART_InitStructure.USART_StopBits = USART_StopBits_1; //ֹͣλÉèÖãº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_Init(UART5, &USART_InitStructure); //³õʼ»¯USART2
// NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //ÇÀÕ¼ÓÅÏȼ¶ 3
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×ÓÓÅÏȼ¶ 3
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ ͨµÀʹÄÜ
// NVIC_Init(&NVIC_InitStructure); //ÖжÏÓÅÏȼ¶³õʼ»¯
//
// //´ò¿ª·¢ËÍÖжϺͽÓÊÕÖжÏ(Èç¹ûÐèÒªÖжÏ)
// //USART_ITConfig(USART2, USART_IT_TXE, ENABLE); // ʹÄÜÖ¸¶¨µÄUSART1·¢ËÍÖÐ¶Ï £»
// USART_ITConfig(UART5, USART_IT_RXNE, ENABLE); // ʹÄÜÖ¸¶¨µÄUSART1½ÓÊÕÖÐ¶Ï £»
//
// //µÚ5²½£ºÊ¹ÄÜ USART2£¬ ÅäÖÃÍê±Ï
// USART_Cmd(UART5, ENABLE); //ʹÄÜ UART5
//
// //ÈçÏÂÓï¾ä½â¾öµÚ1¸ö×Ö½ÚÎÞ·¨ÕýÈ··¢ËͳöÈ¥µÄÎÊÌâ
// USART_ClearFlag(UART5, USART_FLAG_TC); //Çå´®¿Ú5·¢ËͱêÖ¾
//
//}
usart.h
#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"
#define USART_REC_LEN 200 //¶¨Òå×î´ó½ÓÊÕ×Ö½ÚÊý 200
#define EN_USART1_RX 1 //ʹÄÜ£¨1£©/½ûÖ¹£¨0£©´®¿Ú1½ÓÊÕ
extern u8 USART_RX_BUF[USART_REC_LEN]; //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.Ä©×Ö½ÚΪ»»Ðзû
extern u16 USART_RX_STA; //½ÓÊÕ״̬±ê¼Ç
void USART2_Send(u8* buf, u16 len);
void USART1_Config(void);
void USART2_Config(void);
void USART3_Config(void);
void UART4_Config(void);
void UART5_Config(void);
#endif
6466

被折叠的 条评论
为什么被折叠?



