在程序里定义一个U32的变量,然后将它减去1,再显示在用35位LCD上 你会发现会出现一个32位长的10进制数字,这就是错误了,u32最大也只能表示出429496726的正整数
现在怎么出现一个32位的不明数据(后10位是正确的,前面多了22位不知道哪里出错了) 为什么会出现这个情况?我还没仔细研究过,不够先发表一文章说明一下
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
u32 a=2;
void TIM2_IRQHandler(void)
{ TIM2->SR&=~(1<<0);//清除中断标志位
a--;
LED0=!LED0;
}
void Time_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<0;//TIM3时钟使能
TIM2->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM2-> SC=psc; //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM2->DIER|=1<<0; //允许更新中断
TIM2->DIER|=0<<6; //允许触发中断
TIM2->CR1|=0x01; //使能定时器3
MY_NVIC_Init(1,3,TIM2_IRQChannel,2);//抢占1,子优先级3,组2
}
//Mini STM32开发板范例代码5
//独立看门狗实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LCD_Init();
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //按键初始化
delay_ms(300); //让人看得到灭
IWDG_Init(4,625); //与分频数为64,重载值为625,溢出时间为1s
Time_Init(7199,1);
LED0=0; //点亮LED0
while(1)
{
if(KEY0==1)IWDG_Feed();//如果WK_UP按下,则喂狗
LCD_ShowNum(0,0,a,35,12);
}
}
|