/* STM32F10X_MD
USE_STDPERIPH_DRIVER
SYSCLK_FREQ_48MHz 都需要在工程中C、C++ 预处理栏目去定义 */
#include "stm32f10x.h"
#include <stdio.h>
#include "My_Stm32F103.h"
int main(void) {
__IO uint32_t MyTemp_1 = 0;
RCC_CFGR = RCC_CFGR | 0x06000000; //设置MCO输出—(HSE)—信号
RCC_AHBENR = 0xffffffff; //Open FLASH,SRAM,DMA;clock
RCC_APB2ENR = 0xffffffff; //Open All clock
RCC_APB1ENR = 0xffffffff; //Open All clock
AFIO_MAPR = 0x02000000; //释放出三个JTAG的口,做普通IO口线。
GPIOA_ODR = 0x0000ffff; //凡是输入:全部搞成“上拉”
GPIOA_CRL = 0x88888888;
GPIOA_CRH = 0x3888888B; //PA15 做普通IO(3),PA8复用推挽(B)做MCO
GPIOB_ODR = 0x0000ffff;
GPIOB_CRL = 0x88833888; //PB3,4做普通IO(3)—推挽50MHz—
GPIOB_CRH = 0x88888888;
GPIOC_ODR = 0x0000ffff;
GPIOC_CRL = 0x88888888;
GPIOC_CRH = 0x88888888;
GPIOD_ODR = 0x0000ffff;
GPIOD_CRL = 0x88888888; //晶体振荡器"88"带上拉也可起振
GPIOD_CRH = 0x88888888;
RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能时钟安全系统
while(1)
{
// 没事空转...
GPIO_WriteBit(GPIOB, GPIO_Pin_3, Bit_RESET);
MyTemp_1++;
GPIO_WriteBit(GPIOB, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_RESET);//设置或者清除指定的数据端口位
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET); //设置或者清除指定的数据端口位
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_RESET);//设置或者清除指定的数据端口位 重复100次
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET); //设置或者清除指定的数据端口位 重复100次
}
}
———————————NMI中断—————————stm32f10x_it.c 中——
void NMI_Handler(void)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_4);//清除指定的数据端口位(给逻辑分析仪提供触发)
RCC_ClearITPendingBit(RCC_IT_CSS);//清除RCC的中断待处理位
RCC->CFGR = 0x066A0400; // HSI x 12倍频=48MHz(若用HSE也要先除以2得到4Mhz)
/* RCC->CFGR = 0x066B0400; HSE x 12倍频=48MHz */
/* Enable PLL */
RCC->CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}
/* Select PLL as system clock source */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
/* Wait till PLL is used as system clock source */
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
{
}
GPIO_SetBits(GPIOB, GPIO_Pin_4);//设置指定的数据端口位(给逻辑分析仪提供NMI结束标示)
}
————————————NMI 结束————————————
SystemInit 里面 修改(添加)
RCC->CFGR = 0x066B0400; //直接HSE /2=4MHz x 12倍频 添加这行在system_stm32f10x.c
/* RCC->CFGR = 0x066A0400; //直接hsI/2=4MHz x 12倍频 */
// 位置在 PLL 使能 之前。。。
/* Enable PLL */
RCC->CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}
。
。
/* 后面没多少行 就是 SetSysClockTo56() 的程序体 */
|