这几天把rcc时钟搞明白了。其实主要是流程 看错了计算器1到31位,结果是错位了,一直找不到原因。
原来mac 自带编程计算器也是从0到31
stm32中文手册讲得比较明白
自己摸索下设置了串口发送数据
自己用的是蓝色药丸 (blue pill )淘宝10块不到一小块 stm32f103c8t6
led灯是portc 13脚
本程序全部是用寄存器方式设置
#include "stm32f10x_lib.h"
#include
#include "sys.h"
//测试c++
class LED
{
public:
LED();
~LED();
};
void delay(void)
{
volatile unsigned int i;
for( i = 0; i < 0x3fffff; ++i);
}
void delay_ms(void)
{
volatile unsigned int i;
for( i = 0; i < 0x55; ++i);
}
void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)
{
SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器
//用于标识向量表是在CODE区还是在RAM区
}
void MYRCC_DeInit(void)
{
RCC->APB1RSTR = 0x00000000;//复位结束
RCC->APB2RSTR = 0x00000000;
RCC->AHBENR = 0x00000014; //睡眠模式闪存和SRAM时钟使能.其他关闭.
//RCC->APB2ENR = 0x00000000; //外设时钟关闭.
RCC->APB1ENR = 0x00000000;
RCC->CIR = 0x00000000; //关闭所有中断
//RCC->APB2RSTR|=1<<4; //ADC1复位
//RCC->APB2RSTR&=~(1<<4);
//配置向量表
MY_NVIC_SetVectorTable(0x08000000,0x0);
}
void ClockInit(u8 PLL)
{
unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=(1<<16); //外部高速时钟使能HSEON
while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0x00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
// RCC->CFGR &= (uint32_t)((uint32_t)~(0x00010000 | 0x00020000 |0x003C0000));
// RCC->CFGR |= (uint32_t)(0x00010000 | 0x001C0000);
RCC->CFGR=0x1D0402;//0x1D2402;上面 用16位pllsrc是使用HSE时钟 17位是0 不分频 pllmul 111是0x1c 9倍频
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>25));//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02) //等待PLL作为系统时钟设置成功
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
void uart_init(u32 pclk2,u32 bound)
{
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口时钟
GPIOA->CRH&=0XFFFFF00F;//IO状态设置
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=0x271; // 波特率设置 直接固化 如果总线是36 那波特率是57600
USART1->CR1|=0x200C; //1位停止,无校验位.
}
int main(void)
{
//Stm32_Clock_Init(9);
ClockInit(9);
///////////////////////////////////
RCC->APB2ENR |=(1<<14);//使能usart1
RCC->APB2ENR |=(1<<2);//使能PORTA口时钟
/* Infinite loop */
RCC->APB2ENR |=(1<<4); // 使能PORTC口的时钟
GPIOC->CRH|=0x100000;//pc13要用CRH 小8用CRL
uart_init(72,115200);
while(1)
{
delay();
GPIOC->ODR ^= (1<<13);
for(char i=47;i<58;i++){
USART1->DR=i;
while(((USART1->SR & 0x40)==0));
}
USART1->DR=0x00;
while(((USART1->SR & 0x40)==0));
//E6B189 汉 utf8编码
USART1->DR=0xE6;
while(((USART1->SR & 0x40)==0));
USART1->DR=0xB1;
while(((USART1->SR & 0x40)==0));
USART1->DR=0x89;
while(((USART1->SR & 0x40)==0));
//输出回车和换行
USART1->DR=0x20;
while(((USART1->SR & 0x40)==0));
USART1->DR=0x0a;
while(((USART1->SR & 0x40)==0));
USART1->DR=0x0d;
}
}
上一篇:关于stm32的flash的擦除的理解
下一篇:STM32填坑:时钟使能必须在外设初始化之前
推荐阅读最新更新时间:2024-03-16 16:18
设计资源 培训 开发板 精华推荐
- HDMI/ DP2.0 线上实测研讨会|是德科技
- 罗姆有奖直播|可应用于LiDAR的激光二极管及周边电源推荐
- 【边分享,边成长,11月有奖】EEWORLD优秀主题/回复第16期活动开始拉
- 是德科技有奖问答活动之二,小信号测试的示波器方案,答题闯关赢好礼!
- 福禄克有奖直播|新型8.5位数字多用表技术发展及应用
- 直播已结束|如何通过【TI MSPM0 固件示例】及【常用电机驱动器方案和拓扑】,在10分钟内旋转电机
- 2022 Digi-Key KOL 视频系列:四翼扑翼机(仿生鸟)原理及设计解析
- 拆惊喜抽奖:泰克全新3系列MDO和4系列MSO示波器来啦
- 泰克福袋:示伴功倍,万能福袋派送中
- 预约有礼:以光代电,硅光芯片了解一下~ 走进工程师网络学堂直播,赢好礼
- MSP430FR5969芯片里面有EEROM吗?
- 关于232串口电平转换芯片,说说我的经历
- 两片4通道AD芯片如何级联实现8通道的模拟信号采集
- 【GD32E503评测】Part7:屏幕撕裂是什么?大家可以一起来看看哦!
- FPGA引脚(接上贴)
- 【ESP32-Korvo测评】 04 开发环境搭建
- Freescale 2009 seminar之五New Product Update Update i.MX for Consumer and Ge
- 2010---我们开始准备了吗?
- 【10/30@上海 - 系统集合商见面会,立即报名!】物联网战略合作高峰论坛-打造基于...
- 上百个电路实用图集锦(刚才不知为何没传上,抱歉)