
资深工程师
  
- 积分
- 17727
- 在线时间
- 180 小时
- 精华
- 0
- 注册时间
- 2010-11-24
- 最后登录
- 2021-1-19
|
串口初始化程序如下:
void USART1_Config(void)
{
UART1_CR2 = 0; //禁止UART发送和接收
UART1_CR1 = 0x01; //设置M字长,8位数据位
UART1_CR3=0x00; // 1 stop bit
UART1_BRR2=0x00;//00-0d:9600(fcpu=fmaster=2MHz)
UART1_BRR1=0x0d;
UART1_CR2 = 0x0C; //bit3=1,允许发送 bit2=1,允许接收
}
而我运行定时器初始化函数后,在STVP开发环境中观察外设寄存器值就是我写入的值,定时器初始化函数如下:
void Timer2Init(void)
{
TIM2_IER = 0x00; //禁止中断
TIM2_EGR = 0x01; //允许产生更新事件
TIM2_PSCR = 0x01; //计时器时钟=主时钟/2=2Mhz/2 相当于计数器周期为1μs
TIM2_ARRH = 0x03; // 设定重装载时的寄存器值
TIM2_ARRL = 0xe8;
TIM2_CNTRH = 0x03; //设定计数器的初值
TIM2_CNTRL = 0xe8; // 定时周期=1000*1μs=1ms
TIM2_CR1 = 0x01; //b1=1,允许计数器工作b1=0,允许更新,设置控制器,启动定时器
TIM2_IER = 0x01; //允许更新中断
}
从程序运行结果来看,定时器可以正常工作,串口不行,是不是我串口初始化没有成功?为什么串口初始化不成功?跟时钟配置有关系吗?以下是我时钟配置函数:
void McuInit(void)
{
CLK_SWR=0xE1; // 选择芯片内部的16MHz的RC振荡器为主时钟
CLK_CKDIVR=0x18; //CPU时钟=16M/8
_asm("NOP");
_asm("NOP");
_asm("NOP");
CLK_PCKENR1=0x24; //Tim2,UART1外设时钟使能
CLK_PCKENR2=0x00;
}
以下是UART1 IO 口配置
void Uart1_IOConfig(void)
{
PD_DDR |= (1<<5);// TXD 输出模式
PD_CR1 |= (1<<5);// 推挽输出
PD_CR2&=~(1<<5);
PD_DDR &=~(1<<6);//RXD 输入模式
PD_CR1 &=~(1<<6);//浮空输入
} |
|