本帖最后由 安 于 2018-8-9 15:32 编辑 求助各位大神查看一下程序有什么问题,在运行后,大约几秒钟程序就停止了 # include <stm32f10x.h> # include <stdio.h> void RCC_Configuration(void); void GPIO_Configuration(void); void I2C_Configuration(void); void init_8563(void); void gettime_8563(unsigned char time[7]); unsigned char me[7]; u32 i; int main(void) { RCC_Configuration(); GPIO_Configuration(); I2C_Configuration(); for(i=3;i<999;i++) { i--; gettime_8563(me); } } void RCC_Configuration(void)//ÅäÖÃRCC { //----------ʹÓÃÍⲿRC¾§Õñ----------- RCC_DeInit(); //³õʼ»¯ÎªÈ±Ê¡Öµ RCC_HSEConfig(RCC_HSE_ON); //ʹÄÜÍⲿµÄ¸ßËÙʱÖÓ while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //µÈ´ýÍⲿ¸ßËÙʱÖÓʹÄܾÍÐ÷ //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer //FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ RCC_PLLCmd(ENABLE); //Enable PLLCLK while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } //Wait till PLLCLK is ready RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock while(RCC_GetSYSCLKSource()!=0x08) { } //Wait till PLL is used as system clock source //---------´ò¿ªÏàÓ¦ÍâÉèʱÖÓ-------------------- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_USART1,ENABLE); //ʹÄÜAPB2ÍâÉèµÄGPIOAµÄʱÖÓ //ʹÄÜAPB2ÍâÉèµÄGPIOCµÄʱÖÓ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR,ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); } void GPIO_Configuration(void)//ÅäÖÃgpio { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); } void I2C_Configuration(void)//ÅäÖÃICC { I2C_InitTypeDef I2C_InitStructure; // I2C configuration I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0xa2;//I2C1_SLAVE_ADDRESS7; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = 100000;//I2C_Speed; I2C_Cmd(I2C1, ENABLE); I2C_Init(I2C1, &I2C_InitStructure); } void gettime_8563(unsigned char time[7]) //´Ó8563¶Áȡʱ¼ä { unsigned char data_buff[7]; unsigned char i; //start=i2c_start(); I2C_GenerateSTART(I2C1, ENABLE); // Test on EV5 and clear it while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //sendbyte=i2c_send_byte(0x0a2); I2C_Send7bitAddress(I2C1, 0xa2, I2C_Direction_Transmitter); // Test on EV6 and clear it while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //sendbyte=i2c_send_byte(0x02); I2C_SendData(I2C1, 0x02); /* Test on EV8 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //start=i2c_start(); I2C_GenerateSTART(I2C1, ENABLE); // Test on EV5 and clear it while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //sendbyte=i2c_send_byte(0x0a3); I2C_Send7bitAddress(I2C1, 0xa3, I2C_Direction_Receiver); /* Test on EV6 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); //i2c_receive_data(data_buff,7); for(i=0;i<7;i++) { while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); if(i==5) I2C_AcknowledgeConfig(I2C1, DISABLE);/* Disable Acknowledgement */ if(i==6) I2C_GenerateSTOP(I2C1, ENABLE); data_buff=I2C_ReceiveData(I2C1); } //i2c_stop(); I2C_AcknowledgeConfig(I2C1, ENABLE); time[0]=data_buff[0]&0x7f; //sec time[1]=data_buff[1]&0x7f; //min time[2]=data_buff[2]&0x3f; //hour time[3]=data_buff[3]&0x3f; //date time[4]=data_buff[4]&0x07; //week time[5]=data_buff[5]&0x1f; //month time[6]=data_buff[6]; //year } |
STM32F107+LWIP---如何检查tcp通讯断开?并重新连接
有没有用过数字式mems麦克风的,想问下SPI通讯的问题
stm32f103 CAN通讯多帧发送问题?
STM32F107作为USB主机模拟串口通讯不成功(采用PL2303芯片)
STM32F103C8 LIN通讯例程
求助,丐版J-Link通讯不上
ethernet可以与ethercat通讯吗?
LIS3DH SPI 通讯问题
STM32F373 CAN通讯问题CAN_FLAG_LEC
请教高手看看,STM32F1的多机通讯,地址匹配唤醒问题
经过几个月的学习,最近又想好好去研究一下PCF8563与IIC通讯,重新编写了IIC.c 和IIC.h的文件,最基本的文件编写完成后,开始编写PCF8563.c 和pcf8563.h文件 最后在主函数里直接调用 具体代码如下
串å£å©æçæ¾ç¤ºé¨å
太复杂了,看不懂,自己写了个延时程序 ,调用一下就好了
void Delay_MS(u16 dly)
{
u16 i,j;
for(i=0;i<dly;i++)
for(j=10000;j>0;j--);
}
评分
查看全部评分
就是想让它一直读8563里的时间,结果就是太频繁了,加了一个延时就好了
读取的太频繁了,导致整个系统崩溃了,加了一个延时就好了,据说可以把读取放到定时器里定时读取,怎么编写定时器呢?
评分
查看全部评分
评分
查看全部评分
---------确定这样写可以?整数赋给一个指针了
评分
查看全部评分
IIC_Stop(); //产生一个停止条件
delay_ms(10);
评分
查看全部评分
2、从机地址对不对,能不能读到?
3、示波器或者逻辑分析仪抓时需,看看
评分
查看全部评分
读取的太频繁了,导致整个系统崩溃了,加了一个延时就好了,据说可以把读取放到定时器里定时读取,怎么编写定时器呢?
delay_ms(10);这个是单独写的还是keil里自带的啊
可以,确定,能读取到数据,这个不是指针,是一个数组
怎么才能定时读取啊?我是初学的
定时中断啊
不会用定时中断