问答

汇集网友智慧,解决技术难题

21ic问答首页 - TAG - STM32F103
  • STM32F103RE的闹钟中断问题求教

    使用的是正点原子的例子,但是用的是LSI最为时钟源,但是一直复位,不懂为什么,有没有老哥解答一下的,main函数里面有一个打印,上电之后就是一直刷那个打印static void RTC_NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; //RTCÈ«¾ÖÖÐ¶Ï NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÏÈÕ¼ÓÅÏȼ¶1λ,´ÓÓÅÏȼ¶3λ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //ÏÈÕ¼ÓÅÏȼ¶0λ,´ÓÓÅÏȼ¶4λ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ʹÄܸÃͨµÀÖÐ¶Ï NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝNVIC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèNVIC¼Ä´æÆ÷ NVIC_InitStructure.NVIC_IRQChannel =RTCAlarm_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; NVIC_InitStructure.NVIC_IRQChannelSubPriority =1; NVIC_Init(&NVIC_InitStructure); EXTI_ClearITPendingBit(EXTI_Line17); EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Line = EXTI_Line17; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } //ʵʱʱÖÓÅäÖà //³õʼ»¯RTCʱÖÓ,ͬʱ¼ì²âʱÖÓÊÇ·ñ¹¤×÷Õý³£ //BKP->DR1ÓÃÓÚ±£´æÊÇ·ñµÚÒ»´ÎÅäÖõÄÉèÖà //·µ»Ø0:Õý³£ //ÆäËû:´íÎó´úÂë u8 RTC_Init(void) { //¼ì²éÊDz»ÊǵÚÒ»´ÎÅäÖÃʱÖÓ u8 temp=0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //ʹÄÜPWRºÍBKPÍâÉèʱÖÓ PWR_BackupAccessCmd(ENABLE); //ʹÄܺ󱸼ĴæÆ÷·ÃÎÊ BKP_DeInit(); //¸´Î»±¸·ÝÇøÓò RCC_LSICmd(ENABLE); //ÉèÖÃÍⲿµÍËÙ¾§Õñ(LSE),ʹÓÃÍâÉèµÍËÙ¾§Õñ while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) //¼ì²éÖ¸¶¨µÄRCC±ê־λÉèÖÃÓë·ñ,µÈ´ýµÍËÙ¾§Õñ¾ÍÐ÷ { temp++; delay_ms(10); } if(temp>=250)return 1;//³õʼ»¯Ê±ÖÓʧ°Ü,¾§ÕñÓÐÎÊÌâ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); //ÉèÖÃRTCʱÖÓ(RTCCLK),Ñ¡ÔñLSE×÷ΪRTCʱÖÓ RCC_RTCCLKCmd(ENABLE); //ʹÄÜRTCʱÖÓ RTC_WaitForLastTask(); //µÈ´ý×î½üÒ»´Î¶ÔRTC¼Ä´æÆ÷µÄд²Ù×÷Íê³É RTC_WaitForSynchro(); //µÈ´ýRTC¼Ä´æÆ÷ͬ²½ RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR, ENABLE); //ʹÄÜRTCÃëÖжϺÍÄÖÖÓÖÐ¶Ï RTC_WaitForLastTask(); //µÈ´ý×î½üÒ»´Î¶ÔRTC¼Ä´æÆ÷µÄд²Ù×÷Íê³É RTC_EnterConfigMode();/// ÔÊÐíÅäÖà RTC_SetPrescaler(39999); //ÉèÖÃRTCÔ¤·ÖƵµÄÖµ RTC_WaitForLastTask(); //µÈ´ý×î½üÒ»´Î¶ÔRTC¼Ä´æÆ÷µÄд²Ù×÷Íê³É RTC_SetCounter(0); //??????0s /* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask(); //????WORK_TIMES RTC_SetAlarm(10); RTC_WaitForLastTask(); RTC_WaitForSynchro(); RTC_ExitConfigMode(); //Í˳öÅäÖÃģʽ RTC_NVIC_Config();//RCTÖжϷÖ×éÉèÖà printf("Time is =%d \r\n",RTC_GetCounter()); //??????? return 0; //ok } //RTCʱÖÓÖÐ¶Ï //ÿÃë´¥·¢Ò»´Î extern int count; void RTC_IRQHandler(void) { if(RTC_GetITStatus(RTC_IT_SEC)!=RESET) { printf("Time is =%d \r\n",RTC_GetCounter()); //??????? } RTC_ClearITPendingBit(RTC_IT_OW|RTC_IT_SEC); RTC_WaitForLastTask(); } //ÄÖÖÓÖÐ¶Ï void RTCAlarm_IRQHandler(void) { if(RTC_GetITStatus(RTC_IT_ALR) != RESET) { printf("THE ALARM READY =%d \r\n",RTC_GetCounter());//??????? RTC_ClearITPendingBit(RTC_IT_ALR); PWR_BackupAccessCmd(ENABLE); RTC_EnterConfigMode(); RTC_WaitForLastTask(); RTC_SetAlarm(10+RTC_GetCounter()); //???????40s? RTC_WaitForLastTask(); RTC_ExitConfigMode(); PWR_BackupAccessCmd(DISABLE); } EXTI_ClearITPendingBit(EXTI_Line17); RTC_WaitForLastTask(); RTC_ClearITPendingBit(RTC_IT_ALR); RTC_WaitForLastTask(); }

    STM32F103 tc RTC TI ic ni

    1360浏览量 1回复量 关注量
  • GD32F103替换STM32F103 看门狗问题

    芯片为GD32F103VCT6 ,原程序替换后 发现仿真时设置断点就会持续复位,屏蔽看门狗以后正常,请教是什么问题

    看门狗 STM32F103 gd32F103 仿真 芯片 gd32f103vct6

    1880浏览量 3回复量 关注量
  • stm32f103zg程序跳转到系统bootloader失败 sos

    目前用的芯片是stm32f103zg,准备使用串口升级程序,看到手册AN2606中,该芯片是支持USART1通过系统boot loader更新程序的。现在的程序是用stm32cubemx生成的,程序如下 int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_10)==GPIO_PIN_RESET) { JumpToBootloader(); } else { JumpToApp(); } } /* USER CODE END 3 */ } /* USER CODE BEGIN 4 */ static void JumpToBootloader(void) { uint32_t i=0; void (*SysMemBootJump)(void); /*声明一个函数指针*/ __IO uint32_t BootAddr = 0x1FFFE000;//0x1FFF0000; /* STM32F103 的系统 BootLoader 地址*/ /*关闭全局中断*/ __disable_irq(); /*关闭滴答定时器,恢复到默认值*/ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /*设置所有时钟到默认状态,使用HSI时钟*/ HAL_RCC_DeInit(); /* 关闭所有中断,清除中断挂起标志 */ for (i = 0; i < 8; i++) { NVIC->ICER[i]=0xFFFFFFFF; NVIC->ICPR[i]=0xFFFFFFFF; } /* 使能全局中断 */ __enable_irq(); /*设置重映射到系统Flash */ // __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH(); /* 跳转到系统 BootLoader,首地址是MSP,地址 +4 是复位中断服务程序地址 */ SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4))); /* 设置主堆栈地址*/ __set_MSP(*(uint32_t *)BootAddr); /*在RTOS工程,这条语句很重要,设置为特权模式,使用MSP指针 */ __set_CONTROL(0); /* 跳转到系统 BootLoader */ SysMemBootJump(); } static void JumpToApp(void) { uint32_t i=0; void (*SysMemBootJump)(void); /*声明一个函数指针*/ __IO uint32_t BootAddr = 0x8001800; /* APP程序地址*/ /*关闭全局中断*/ __disable_irq(); /*关闭滴答定时器,恢复到默认值*/ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /*设置所有时钟到默认状态,使用HSI时钟*/ HAL_RCC_DeInit(); /* 关闭所有中断,清除中断挂起标志 */ for (i = 0; i < 8; i++) { NVIC->ICER[i]=0xFFFFFFFF; NVIC->ICPR[i]=0xFFFFFFFF; } /* 使能全局中断 */ __enable_irq(); /* 跳转到系统 BootLoader,首地址是MSP,地址 +4 是复位中断服务程序地址 */ SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4))); /* 设置主堆栈地址*/ __set_MSP(*(uint32_t *)BootAddr); /*在RTOS工程,这条语句很重要,设置为特权模式,使用MSP指针 */ __set_CONTROL(0); /* 跳转到系统 BootLoader */ SysMemBootJump(); } /* USER CODE END 4 */ 现在这个程序是可以正常跳转到APP程序的,就是跳转bootloader不成功,用stm32programmer,连接不上串口。如果直接把BOOT0置高是可以连接上串口的,所以硬件上应该没有问题。

    Bootloader STM32F103 se ic rc TI

    3296浏览量 0回复量 关注量
  • gd32f103替代stm32f103 fsmc问题 sos

    我使用gd32f103zet6 替代 stm32f103zet6 ,但是fsmc的 sram 不可使用 ,sram 为 is62wv51216bll 。程序停留下在如下代码 //在指定地址开始,连续读出n个字节. //pBuffer:字节指针 //ReadAddr:要读出的起始地址 //n:要写入的字节数 void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n) { for(;n!=0;n--) { *pBuffer++=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr); ReadAddr+=2;//这里需要加2,是因为STM32的FSMC地址右移一位对其.加2相当于加1. } }

    STM32F103 gd32F103 FSMC AD ADDR DDR

    5793浏览量 0回复量 关注量
  • STM32F103生成方波问题求教

    [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]最近使用STM32F103RB做了个小东西,其中需要输出一路频率大约在1Hz左右的方波信号。我使用定时器3来产生,配置好定时器后,在中断里面使一个IO口的电平翻转,从而产生方波。但产生的方波总是会断一下,就是时不时电平就少翻转一次,即总是有连续两个的高电平或者连续连个的低电平。我在中断里面放了一个变量,发现每次中断是能进去的,方波断的地方是电平该翻转没有翻转。翻转电平的语句我也试几种,用变量判断,或者直接该位取反,都试过了,都是这个问题。IO口配置的是推挽输出,50MHz频率。请教各位有没有遇到过类似问题,或者帮我分析一下可能是什么原因,还能做什么测试?谢谢。[/size][/font][/backcolor][/color]

    方波 STM32F103 电平 定时 定时器 IO

    7604浏览量 72回复量 关注量
  • GD32F103支持STM32F103的HAL库替换吗?

    如题:GD32F103支持STM32F103的HAL库替换吗?如果能替换,替换流程是怎样的?

    STM32F103 gd32F103

    2942浏览量 1回复量 关注量
  • GD130C8T6移植STM32F103代码,兼容ST的F1标准库 还是 F0的标准库 sos

    GD130C8T6移植STM32F103代码,兼容ST的F1标准库 还是 F0的标准库?

    代码 移植 STM32F103

    2680浏览量 0回复量 关注量
  • 求和STM32F103 不兼容手册 sos

    求和STM32F103 不兼容手册[img]https://bbs.21ic.com/static/image/smiley/comcom/9.gif[/img][img]https://bbs.21ic.com/static/image/smiley/comcom/9.gif[/img][img]https://bbs.21ic.com/static/image/smiley/comcom/9.gif[/img]

    STM32F103

    1208浏览量 0回复量 关注量
  • 定时器使用

    老师们,我要用STM32F103定时器定时,采用查询方式,用哪个HAL库函数查询标志呢?

    定时器 STM stm32f10 STM32F1 STM32F103

    570浏览量 1回复量 关注量