/*******************************************************************************
编译环境: EWARM V5.30
硬件环境: DZY2.PCB
STM32 FW: V3.0.0
作者 : szlihongtao
******************************************************************************
REV : V1.00
DATE : 2011-04-18
NOTE :
*******************************************************************************/
#include "stm32f10x.h"
#include "stm32_m.h"
#include "dzy.h"
#include "myRCC.h"
//******************************************************************************
#define TIM1_CCR3_Address 0x40012C3C
bit f_tb; // 基本定时标志
bit f_100ms, f_1000ms;
INT16U cnt_test; // 计数器,仅供软件调试使用
float clk_sys; // 仅供软件调试使用
#if 1
uint16_t SRC_Buffer[ ] =
{ 72 * 5 }; // 由于载波频率取20kHZ,所以最大脉冲宽度不要超50us,即常数不要超过72*50
#else
uint16_t SRC_Buffer[]=
{ 72*2,72*5,72*10,72*20,72*40,72*10}; // 由于载波频率取20kHZ,所以最大脉冲宽度不要超50us,即常数不要超过72*50
#endif
//******************************************************************************
// 延时程序,单位为*1ms
//******************************************************************************
void delayms( INT16U cnt )
{
//#define CONST_1MS 7333 // 72MhZ
//#define CONST_1MS 3588 // 32MhZ
#define CONST_1MS (105*FCLK)
INT16U i;
__no_operation( );
while ( cnt-- )
for ( i = 0; i < CONST_1MS; i++ )
;
}
//******************************************************************************
// pcb上的指示灯
//******************************************************************************
static void led_toggle( void )
{
GPIOC->ODR ^= GPIO_Pin_7; // led2 toogle
GPIOC->ODR ^= GPIO_Pin_6; // led3 toogle
}
//******************************************************************************
// 时钟设置初始化
//******************************************************************************
static void RCC_Configuration( void )
{
ErrorStatus HSEStartUpStatus;
/*
RCC_AdjustHSICalibrationValue 调整内部高速晶振(HSI)校准值
RCC_ITConfig 使能或者失能指定的RCC中断
RCC_ClearFlag 清除RCC的复位标志位
RCC_GetITStatus 检查指定的RCC中断发生与否
RCC_ClearITPendingBit 清除RCC的中断待处理位
*/
/* RCC system reset(for debug purpose) */
// 时钟系统复位
RCC_DeInit( );
// 使能外部的8M晶振
// 设置外部高速晶振(HSE)
/* Enable HSE */
RCC_HSEConfig( RCC_HSE_ON );
// 使能或者失能内部高速晶振(HSI)
RCC_HSICmd( DISABLE );
// 等待HSE起振
// 该函数将等待直到HSE就绪,或者在超时的情况下退出
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp( );
if ( HSEStartUpStatus == SUCCESS )
{
// 设置AHB时钟(HCLK)
RCC_HCLKConfig( RCC_HCLK_Div_ ); // 36 MHz
// 设置低速AHB时钟(PCLK1)
RCC_PCLK1Config( RCC_PCLK1_Div_ ); // 2.25 MHz
// 设置高速AHB时钟(PCLK2)
RCC_PCLK2Config( RCC_PCLK2_Div_ ); // 2.25 MHz
/* ADCCLK = PCLK2/8 */
// 设置ADC时钟(ADCCLK)
RCC_ADCCLKConfig( RCC_ADC_DIV_ ); // 0.281Mhz
// 设置USB时钟(USBCLK)
// USB时钟 = PLL时钟除以1.5
//RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
// 设置外部低速晶振(LSE)
RCC_LSEConfig( RCC_LSE_OFF );
// 使能或者失能内部低速晶振(LSI)
// LSE晶振OFF
RCC_LSICmd( DISABLE );
// 设置RTC时钟(RTCCLK)
// 选择HSE时钟频率除以128作为RTC时钟
//RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
// 使能或者失能RTC时钟
// RTC时钟的新状态
RCC_RTCCLKCmd( DISABLE );
/* Flash 2 wait state */
FLASH_SetLatency( FLASH_Latency_2 );
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable );
/* PLLCLK = 8MHz * 9 = 72 MHz */
// 设置PLL时钟源及倍频系数
RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_ );
/* Enable PLL */
// 使能或者失能PLL
RCC_PLLCmd( ENABLE );
/* Wait till PLL is ready */
// 检查指定的RCC标志位设置与否
while ( RCC_GetFlagStatus( RCC_FLAG_PLLRDY ) == RESET )
{
}
/* Select PLL as system clock source */
// 设置系统时钟(SYSCLK)
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK );
/* Wait till PLL is used as system clock source */
// 返回用作系统时钟的时钟源
while ( RCC_GetSYSCLKSource( ) != 0x08 )
{
}
}
// 使能或者失能AHB外设时钟
RCC_AHBPeriphClockCmd(
RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_DMA2 | RCC_AHBPeriph_SRAM
| RCC_AHBPeriph_FLITF | RCC_AHBPeriph_CRC | RCC_AHBPeriph_FSMC
| RCC_AHBPeriph_SDIO, DISABLE );
// 使能或者失能APB1外设时钟
RCC_APB1PeriphClockCmd( RCC_APB1Periph_ALL, DISABLE );
// 强制或者释放高速APB(APB2)外设复位
RCC_APB2PeriphResetCmd( RCC_APB2Periph_ALL, ENABLE );
// 退出复位状态
RCC_APB2PeriphResetCmd( RCC_APB2Periph_ALL, DISABLE );
// 强制或者释放低速APB(APB1)外设复位
RCC_APB1PeriphResetCmd( RCC_APB1Periph_ALL, ENABLE );
// 强制或者释放后备域复位
RCC_BackupResetCmd( ENABLE );
// 使能或者失能时钟安全系统
RCC_ClockSecuritySystemCmd( DISABLE );
}
//******************************************************************************
// NVIC设置
//******************************************************************************
void NVIC_Configuration( void )
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1 );
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init( &NVIC_InitStructure );
}
//******************************************************************************
// SysTick设置初始化
//******************************************************************************
static void SysTick_Config1( void )
{
#if 1
#define SystemFreq (FCLK*1000000.0) // 单位为Hz
#define TB_SysTick (TIME_TB*1000) // 单位为uS,与示波器实测一致
static INT32U ticks;
ticks = ( INT32U )( ( TB_SysTick / 1000000.0 ) * SystemFreq );
SysTick_Config( ticks );
#endif
}
//******************************************************************************
// GPIO设置
//******************************************************************************
static void GPIO_Configuration( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
| RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE );
//------------------------------------------------------------------------------
GPIO_Write( GPIOA, 0xffff );
/* GPIOA Configuration: Channel 3 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init( GPIOA, &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
// GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init( GPIOA, &GPIO_InitStructure );
//------------------------------------------------------------------------------
GPIO_Write( GPIOB, 0xffff ); // 11111101-11111111
/* GPIOB Configuration: Channel 3N as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init( GPIOB, &GPIO_InitStructure );
//------------------------------------------------------------------------------
GPIO_Write( GPIOC, 0xff0f ); // 11111111-00001111
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_4
| GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init( GPIOC, &GPIO_InitStructure );
//------------------------------------------------------------------------------
GPIO_Write( GPIOD, 0xffff ); // 11111111-11111111
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_2;
上一篇:STM32控制SG90舵机
下一篇:CubeMX Stm32F407生成一定周期的占空比不同的方波DMA+定时器
推荐阅读最新更新时间:2024-11-12 22:25
设计资源 培训 开发板 精华推荐
- BD49xxx系列BD49K50电压检测IC的典型应用
- RNS-2328KT 电子管麦克风放大器组合
- RT8279 5A、36V、500kHz降压转换器典型应用电路
- KIT33932EKEVBE: 评估套件 - MC33932EK,双通道5A油门控制
- NCV33164低压检测微处理器复位典型应用电路
- 具有最大功率点跟踪功能的 LTC4162EUFD-FST 太阳能供电 3 节 3.2A 充电器的典型应用
- CH340G USB转串口 (搭配BluePill使用)
- DC1513B-AD,用于 LTM9004-AD、20MHz LPF、14 位、125Msps 直接转换接收器的演示板
- esp32c3 mini
- LTC3624EMSE-25 5V 输出电压、2A 同步降压型稳压器的典型应用,具有 800mA 突发钳位,fSW = 1MHz
- OpenAI呼吁建立“北美人工智能联盟” 好与中国竞争
- 传OpenAI即将推出新款智能体 能为用户自动执行任务
- 尼得科智动率先推出两轮车用电动离合器ECU
- ASML在2024 年投资者日会议上就市场机遇提供最新看法
- AMD将裁员4%,以在人工智能芯片领域争取更强的市场地位
- Arm:以高效计算平台为核心,内外协力共筑可持续未来
- NEC收获新超算订单:英特尔CPU+AMD加速器+英伟达交换机
- 高通推出其首款 RISC-V 架构可编程连接模组 QCC74xM,支持 Wi-Fi 6 等协议
- 消息称内存原厂考虑 HBM4 采用无助焊剂键合,进一步降低层间间隙
- 随时随地享受大屏幕游戏:让便携式 4K 超高清 240Hz 游戏投影仪成为现实
- 预约有礼:以光代电,硅光芯片了解一下~ 走进工程师网络学堂直播,赢好礼
- 免费申请TI 样片,晒单赢好礼!
- 国产FPGA安路科技研讨会-北京站 火热报名中,参会赢京东卡!
- 论坛有5只冰墩墩等你来赢:一起 DIY 冰墩墩!
- 非凡富士通FRAM,仅需微小电源即可高速写入数据!看视频答题有礼!
- 最后一天!Beetle ESP32-C3免费测评,赶紧上车
- 大学堂学分闪亮登场 看谁率先登上光荣榜!
- 【Molex莫仕工业通讯与安全解决方案】
- 有奖直播:Microchip适用于CryptoAuthentication™系列的可信任平台
- Microchip 喊你快来打造你的理想型单片机,智能门铃、百元京东卡等【80份】好礼等你赢!