问答

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

21ic问答首页 - TAG - ST
  • freertos 从V1升级到V2后lwip、FATFS适配有问题。 sos

    我最近在使用stm32F746开发板进行touchgfx开发时,客户想要联网,我原来用的是freertos(V1)+lwip是正常的,最近用touchGFX4.23使用示例出生的工程,他使用的freertos是V2版本的,在用stm32cubeMAX加入lwip与fatfs时,运行不正常。各位大佬们有没有遇到这样的问题?

    ST MUC

    477浏览量 0回复量 关注量
  • GD32F303问题

    [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]问题背景是这样的:[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]配置了一个20Khz的定时器溢出中断,System_cnt_add()函数是对一个变量++,就是创建了一个时间基准。然后在Task_time_slice_function()函数里面实现了一个led每0.5s翻转的任务。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]于是遇到了这样一个问题:[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]当我把这个Task_time_slice_function()函数放在中断的时候,led能够正常实现每0.5s翻转的操作,也就是输出一个1Hz的方波。但是当我把Task_time_slice_function()函数放在main函数的while循环里面时,功能就失效了,变成输出32Hz的方波。有没有人知道怎么回事,希望能指点一下,谢谢![/size][/font][/backcolor][/color][font=Tahoma, Microsoft Yahei, Simsun][color=#444444][size=16px] [/size][/color][/font][color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]这是用到的几个函数[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]int main(void)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] Systemclock_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] nvic_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] gpio_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] spi2_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] timer_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] System_cnt_init();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] while(1)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] Task_time_slice_function();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]/* time0 20kHz*/[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]void TIMER0_UP_IRQHandler(void)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{ [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(SET == timer_interrupt_flag_get(TIMER0, TIMER_INT_UP))[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] System_cnt_add();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]void Task_time_slice_function(void)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 1ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_1ms) >= systemclock_data.systemclock_cnt_1ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_1ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] led_main();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 10ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_10ms) >= systemclock_data.systemclock_cnt_10ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_10ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 100ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_100ms) >= systemclock_data.systemclock_cnt_100ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_100ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 1000ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_1000ms) >= systemclock_data.systemclock_cnt_1000ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_1000ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color]

    TE GD32F303 ST sy System syste

    1494浏览量 3回复量 关注量
  • stlinkV3 Set VCP端口使用问题

    单片机给stlinkV3set uart口发数据,电脑端串口助手收不到数据,已共地,求解

    StlinkV3 set STLINK ST 使用 端口

    720浏览量 2回复量 关注量
  • TIM3捕获配置时,只要一NVIC_Init使能中断就卡死,咨询下大家

    STM32F103ZET6板子,想用TIM3_CH2来捕获TIM8 CH3输出的pwm,为此将pwm TIM8_CH3输出的管脚PC8 和 TIM3_CH2管脚PA7 连起来后,发现程序执行不下去了(不连起来就能执行)。卡死了好像。请帮看下可能原因。 做过的尝试: 1、自己把TIM3 CH2的优先级改成最高(抢占优先级为0,响应优先级也为0),也不行。 2、PC8 和 TIM3_CH2管脚PA7 连线去除,发现程序能执行下去 3、中断不使能,就是不执行Nvic_init也可以执行下去,说明肯定是和中断相关。 TIM3_CH2初始化的代码: void InitFan3InletFG(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; //初始化GPIO复用 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化定时器 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period = 0xFFFF-1; TIM_TimeBaseStructure.TIM_Prescaler = 72-1; //1us,总时间65ms TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* IC2,上升沿触发 TI2FP2 */ TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_PWMIConfig(TIM3, &TIM_ICInitStructure); #if 0 /* IC2, 下降沿触发,TI2FP1*/ TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_PWMIConfig(TIM5, &TIM_ICInitStructure); #endif TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable); TIM_Cmd(TIM3, ENABLE); //使能CC2捕获中断,主 //// TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); //20231130 1101: try add this TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE); //使能中断 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //3; //0; //1; // 3; //20231130pm5 try modified to 1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /////// NVIC_Init(&NVIC_InitStructure); ///////1130pm15: disable try NVIC_Init(&NVIC_InitStructure); } 中断处理代码: void TIM3_IRQHandler(void) { Timer3ISR(); } void Timer3ISR(void) { int ret; g_tim3Count++; if (g_tim3Count % 100 == 0) { //printf("timer3 got\r\n"); } TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); TIM_ClearITPendingBit(TIM3, TIM_IT_CC1); TIM_ClearITPendingBit(TIM3, TIM_IT_CC3); TIM_ClearITPendingBit(TIM3, TIM_IT_CC4); //TIM3, CH2通道 ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC2); if (ret) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); Tim3Ch2Isr(); } //TIM3, CH1通道 ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC1); if (ret) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC1); Tim3Ch1Isr(); } //TIM3, CH3通道 ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC3); if (ret) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC3); Tim3Ch3Isr(); } //TIM3, CH4通道 ret = TIM_GetFlagStatus(TIM3, TIM_FLAG_CC4); if (ret) { TIM_ClearITPendingBit(TIM3, TIM_IT_CC4); Tim3Ch4Isr(); } }

    ni TIM3 Tru structure ST NVIC

    848浏览量 1回复量 关注量
  • 这个芯片是不是坏了 sos

    [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]业余玩家 闲得无聊 买了一块STM8103F3P6的最小板 接了一个SR04的超声波测距模块 搞了几天都搞不懂 试了输入捕获 结果 捕获的两个值 一样。。。 看网上的 计数器来算 但是 好像又是错的 抄了别实现成功的代码 感觉出来还是有问题 我很疑惑 纳闷 虽然不是学这个的 但是看了那一部分东西 感觉也没那么难呀 反转就是 搞不出了 。没事干想一步一步分开验证 结果 越看越疑惑 都快怀疑人生的 有人能帮我解答下吗 看下我附的图片。。。 上传不了图片。。。。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]static uint16_t tic=0;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]uint16_t ticp=0;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]int main( void )[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] //init_sr04();//初始化超声波测距设备[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] uartOne();//初始化语音播报模块[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] enableInterrupts();//开启系统中断[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_DeInit();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_TimeBaseInit(TIM2_PRESCALER_8, 65535);//fmaster 16MHz[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_ClearFlag(TIM2_FLAG_UPDATE);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_ClearITPendingBit(TIM2_IT_UPDATE);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] while(1)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] //get_cap_value();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_SetCounter(0x0000);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_Cmd(ENABLE);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] delay_ms(30);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] ticp=TIM2_GetCounter();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_Cmd(DISABLE);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] delay_ms(100);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] printf("tic:%d\n",tic);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] printf("ticp:%d\n",ticp);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_ClearFlag(TIM2_FLAG_UPDATE);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] tic=0;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] delay_ms(1000);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* In order to detect unexpected events during development,[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] it is recommended to set a breakpoint on the following instruction.[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(TIM2_GetITStatus(TIM2_IT_UPDATE) == SET)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] tic++;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] TIM2_ClearITPendingBit(TIM2_IT_UPDATE);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]输出结果为[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]tic:0[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]ticp:-4239[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]输出一直是这两个值 按照理解 应该计数器会超时啊 这里输出计数器溢出 而且 为什么会有负数值输出。。。。[/size][/font][/backcolor][/color]

    单片机 ST

    635浏览量 0回复量 关注量
  • STM8103F3 想不通的输出 sos

    业余玩家 闲得无聊 买了一块STM8103F3P6的最小板 接了一个SR04的超声波测距模块 搞了几天都搞不懂 试了输入捕获 结果 捕获的两个值 一样。。。 看网上的 计数器来算 但是 好像又是错的 抄了别实现成功的代码 感觉出来还是有问题 我很疑惑 纳闷 虽然不是学这个的 但是看了那一部分东西 感觉也没那么难呀 反转就是 搞不出了 。没事干想一步一步分开验证 结果 越看越疑惑 都快怀疑人生的 有人能帮我解答下吗 看下我附的图片。。。 上传不了图片。。。。 static uint16_t tic=0; uint16_t ticp=0; int main( void ) { //init_sr04();//初始化超声波测距设备 uartOne();//初始化语音播报模块 enableInterrupts();//开启系统中断 TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_8, 65535);//fmaster 16MHz TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_ClearFlag(TIM2_FLAG_UPDATE); TIM2_ClearITPendingBit(TIM2_IT_UPDATE); while(1) { //get_cap_value(); TIM2_SetCounter(0x0000); TIM2_Cmd(ENABLE); delay_ms(30); ticp=TIM2_GetCounter(); TIM2_Cmd(DISABLE); delay_ms(100); printf("tic:%d\n",tic); printf("ticp:%d\n",ticp); TIM2_ClearFlag(TIM2_FLAG_UPDATE); tic=0; delay_ms(1000); } } INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ if(TIM2_GetITStatus(TIM2_IT_UPDATE) == SET) { tic++; TIM2_ClearITPendingBit(TIM2_IT_UPDATE); } } 输出结果为 tic:0 ticp:-4239 输出一直是这两个值 按照理解 应该计数器会超时啊 这里输出计数器溢出 而且 为什么会有负数值输出。。。。

    ST STM8

    390浏览量 0回复量 关注量
  • STM32分立元件读写M1及CPU卡软件层是如何实现的?

    [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]之前看到别人做的智能锁项目用的是该[/size][/font][/backcolor][/color][color=rgb(65, 131, 196)][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]电路[/size][/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]图实现了M1卡CPU卡的读写,使用的是[/size][/font][/backcolor][/color][color=rgb(65, 131, 196)][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]STM32[/size][/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]F072CBT6的芯片,外接13.56Mhz的晶振。这个软件上是怎样实现的?有没有懂这方面的,帮忙分析下[/size][/font][/backcolor][/color]

    软件 STM32 CPU 嵌入式 单片机 ST

    569浏览量 5回复量 关注量
  • 自动配置软件 sos

    国民技术有类似STM32 cube的工具吗?[img]https://bbs.21ic.com/static/image/smiley/comcom/4.gif[/img]

    STM ST 软件 嵌入式 国产芯片 MUC

    659浏览量 0回复量 关注量
  • flyMcu 写入程序时,写入出错在1KB。

    开始全片擦除(全片擦除时间会比较长,请耐心等 全片振除成功 DTR电平置高(+3-+12V),复位 RTS智低(-3--12V),选择进入BootLoader ..延时100嘉秒 DTR电平变低(-3--127)释放复位 RTS维持低开始连接...6,接收到:79 1F 在串口COM4连接成功38400bps,耗时11253毫秒 芯片内BootLoader版本号: 2.2 芯片PID: 00000414 STM32F10xxx High-density 读出的选项字节: A55AFFOOFFOOFFOOFFOOFFOOFFOOFFOO 96位的芯片唯一序列号: 30EED505304B4735218316437 05D5EE30 35474B30 431683211 长片EIASH警量为256KB芯片 SRAM容量为65535KB(此信息仅供参考,新版本芯片己不包合此信息] 第1234嘉秒,已准备好 开始编程芯片,共需写入9KB,耗时1234建秒 DTR的高电平复位RTS低电平进BootLoader 同过信息: -7 STM WriteMemory 写入出错在1KB,进度0,耗时3172建秒

    ST

    1015浏览量 3回复量 关注量
  • 求助!!STM32F407VE DMA+FSMC+LCD,照片显示成4个小图

    之前一直玩103,最近画了块板子F407Ve的,翻出1个之前的LCD,想通过DMA将数组中的图片,搬到FSMC挂的屏由于对407不是很熟,代码大部分都是通过F407ZE的代码,东拼西凑,改来的 最终图片是显示出来了,但是被均分成了4小份显示出来了,例如:一张图240*320,变成了4张60*80的小图(不好意思,我上传不了图) 然后就是各种线路排出,代码排查。快两个周了,还没找到问题 1. DMA将照片搬到u8、u16、u32数组,数据都没有问题(数据顺序),几乎可以排除DMA代码的问题 2. 如果将数组的数据,按照1个点1个点向LCD写,图片也没问题 3. 只有在通过DMA将数据通过FSMC搬到LCD时,结果就变成4张小图(有可能是数据错位,1分裂成4了) 所以跟人怀疑是FSMC导致的,但是各种试解决不了 [color=#008000]这是LCD地址[/color] #define TFTLCD_BASE ((u32)(0x60000000 | 0x0001FFFE)) //Bank1.sector1 + A16 #define TFTLCD ((TFTLCD_TypeDef *) TFTLCD_BASE) [color=#008000]这是FSMC复用部分配置[/color] GPIO_PinAFConfig(GPIOD,GPIO_PinSource0, GPIO_AF_FSMC);//PD0 FSMC_D2 GPIO_PinAFConfig(GPIOD,GPIO_PinSource1, GPIO_AF_FSMC);//PD1 FSMC_D3 GPIO_PinAFConfig(GPIOD,GPIO_PinSource4, GPIO_AF_FSMC);//PD4 FSMC_NOE GPIO_PinAFConfig(GPIOD,GPIO_PinSource5, GPIO_AF_FSMC);//PD5 FSMC_NWE GPIO_PinAFConfig(GPIOD,GPIO_PinSource8, GPIO_AF_FSMC);//PD8 FSMC_D13 GPIO_PinAFConfig(GPIOD,GPIO_PinSource9, GPIO_AF_FSMC);//PD9 FSMC_D14 GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);//PD10 FSMC_D15 GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);//PD14 FSMC_D0 GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//PD15 FSMC_D1 GPIO_PinAFConfig(GPIOE,GPIO_PinSource7, GPIO_AF_FSMC);//PE7 FSMC_D4 GPIO_PinAFConfig(GPIOE,GPIO_PinSource8, GPIO_AF_FSMC);//PE8 FSMC_D5 GPIO_PinAFConfig(GPIOE,GPIO_PinSource9, GPIO_AF_FSMC);//PE9 FSMC_D6 GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);//PE10 FSMC_D7 GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);//PE11 FSMC_D8 GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);//PE12 FSMC_D9 GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);//PE13 FSMC_D10 GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);//PE14 FSMC_D11 GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);//PE15 FSMC_D12 GPIO_PinAFConfig(GPIOD,GPIO_PinSource7, GPIO_AF_FSMC);//PD7 FSMC_NE1 GPIO_PinAFConfig(GPIOD,GPIO_PinSource11,GPIO_AF_FSMC);//PD11 FSMC_A16 [color=#008000]//这是FSMC关键部分的代码[/color] NorsRamInit.FSMC_Bank = FSMC_Bank1_NORSRAM1;// 存储块标号和区号 :这里我用的是NE1 NorsRamInit.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 数据线与地址线是否复用 :不复用数据地址 NorsRamInit.FSMC_MemoryType = FSMC_MemoryType_SRAM; // 外接存储器类型:FSMC_MemoryType_SRAM; //SRAM NorsRamInit.FSMC_MemoryDataWidth= FSMC_MemoryDataWidth_16b;// 存储器数据宽度:16bit NorsRamInit.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;// 配置访问模式:启用或禁用闪存的突发访问模式,仅对同步突发闪存有效。不太理解!!! NorsRamInit.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;// 等待信号极性 NorsRamInit.FSMC_AsynchronousWait= FSMC_AsynchronousWait_Disable; NorsRamInit.FSMC_WrapMode = FSMC_WrapMode_Disable; // 是否使用非对齐方式 NorsRamInit.FSMC_WaitSignalActive= FSMC_WaitSignalActive_BeforeWaitState; // 等待信号什么时期产生 NorsRamInit.FSMC_WriteOperation= FSMC_WriteOperation_Enable; // 存储器写使能 NorsRamInit.FSMC_WaitSignal= FSMC_WaitSignal_Disable; // 是否使用等待信号 NorsRamInit.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序 NorsRamInit.FSMC_WriteBurst = FSMC_WriteBurst_Disable; // 是否允许突发写操作 NorsRamInit.FSMC_ReadWriteTimingStruct = &ReadTiming;// 读写时序 NorsRamInit.FSMC_WriteTimingStruct = &WriteTiming; // 写时序 FSMC_NORSRAMInit(&NorsRamInit); // 初始化FSMC配置 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); // 使能BANK1 [color=#008000]// 初始化DAM配置[/color] void DMC_LLL(u32 L_PAdd,u32 PIne,u32 PLeng, u32 L_MAdd,u32 MInc,u32 MLeng, u32 L_BufferSize) { DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能 DMA_DeInit(DMA2_Stream1); while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){} //等待DMA2_Stream1可配置 //配置 DMA Stream DMA_InitStructure.DMA_Channel = DMA_Channel_1; //DCMI_CH1 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; //外设到内存 DMA_InitStructure.DMA_BufferSize = L_BufferSize; //数据传输量 DMA_InitStructure.DMA_PeripheralBaseAddr = L_PAdd; //外设地址: DMA_InitStructure.DMA_PeripheralInc = PIne; //外设非增量模式 DMA_PeripheralInc_Disable DMA_InitStructure.DMA_PeripheralDataSize = PLeng; //外设数据长度:32bit DMA_PeripheralDataSize_Word DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; //外设突发单次传输 DMA_InitStructure.DMA_Memory0BaseAddr = L_MAdd; //内存地址 //(u32)&MAdd DMA_InitStructure.DMA_MemoryInc = MInc; //内存增量模式 DMA_MemoryInc DMA_InitStructure.DMA_MemoryDataSize = MLeng; //内存数据长度 DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; //内存突发单次传输 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //使用循环模式(不停地传送,并非一行一行的传送) DMA_InitStructure.DMA_Priority = DMA_Priority_High; //高优先级 DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; //FIFO模式 DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; //使用全FIFO DMA_Init(DMA2_Stream1, &DMA_InitStructure); //初始化DMA Stream //DMA_ITConfig(DMA2_Stream1, DMA_IT_TC, ENABLE); //DMA发送完成中断使能函数 [color=#800080]↑ 不知道为啥我的添加代码文字功能用不了,格式有点乱。[/color] 有没有大佬能给解惑

    ST 单片机 嵌入式 技术交流

    735浏览量 3回复量 关注量
  • NUCLEO-F103RB在升级ST-Link时,导致ST-Link不能使用,求助! 赏100家园币

    [size=4]NUCLEO-F103RB在用ST Link Upgrade升级ST-Link时, 选择Change Type 和 STM32 Debug+VCP,然后点击yes后电脑就不认这全板上的ST-Link了,也没有显示U盘。请问怎么修复? [/size][img]https://shequ.stmicroelectronics.cn/data/attachment/forum/202309/06/155516kbdvd2tpfcbdbedw.png[/img] [img]https://shequ.stmicroelectronics.cn/data/attachment/forum/202309/06/160318g2rc5pi4gamm4z5w.png[/img]

    ST 单片机 嵌入式 技术交流 NUCLEO-F103RB

    9475浏览量 7回复量 关注量
  • 为什么STM32在使用定时器中断的时候ARR的参数不能给0?

    我在使用ETR外部时钟信号时,想实现类似于外部中断的,信号来一次进入一次中断的操作。但是发现当TIM_Period参数给1-1,也就是0时,无法正常进入中断。但是将参数调整为2-1时,来两次信号又可以进入中断,请问这是为什么?uint16_t Count; void TIM_QuicklyInit(void); int main(void) { TIM_QuicklyInit(); OLED_Init(); OLED_ShowString(1,1,"Counts:"); while(1) { OLED_ShowNum(2,1,Count,4); OLED_ShowNum(3,1,TIM_GetCounter(TIM2),1); } } void TIM_QuicklyInit(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIOInitstructure; GPIOInitstructure.GPIO_Mode = GPIO_Mode_IPD; GPIOInitstructure.GPIO_Pin = GPIO_Pin_0; GPIOInitstructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIOInitstructure); TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_Inverted,0x0F); TIM_TimeBaseInitTypeDef TimeInitstructure; TimeInitstructure.TIM_CounterMode = TIM_CounterMode_Up; TimeInitstructure.TIM_ClockDivision = TIM_CKD_DIV4; [b]TimeInitstructure.TIM_Period = 1-1;[/b] TimeInitstructure.TIM_Prescaler = 1-1; TimeInitstructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2,&TimeInitstructure); TIM_ClearFlag(TIM2,TIM_FLAG_Update); TIM_Cmd(TIM2,ENABLE); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitTypeDef NVICInitstructure; NVICInitstructure.NVIC_IRQChannel = TIM2_IRQn ; NVICInitstructure.NVIC_IRQChannelCmd = ENABLE; NVICInitstructure.NVIC_IRQChannelPreemptionPriority = 2; NVICInitstructure.NVIC_IRQChannelSubPriority = 2; NVIC_Init(&NVICInitstructure); } void TIM2_IRQHandler(void) { if(TIM_GetFlagStatus(TIM2,TIM_IT_Update)==SET) Count++; TIM_ClearFlag(TIM2,TIM_IT_Update); }

    单片机 嵌入式 ST

    1227浏览量 8回复量 关注量
  • 读取TF卡

    STM32F407能否读取1T的TF卡?有大概实现方案否?

    技术交流 ST

    2635浏览量 8回复量 关注量
  • GD32E503写入部分寄存器会失败

    使用GD官方库做STM32F103的移植,对应的寄存器的命名方式都采用了官方库的形式。测试时发现每次重新上电AFIO_PCF0寄存器设置失败、I2C启动信号(第8bit start)置位失败、RTC的频率写入失败。如果增加写入操作次数第一次写入失败,第二次写入成功。目前查到了这些异常,相关的外设配置没有发现问题,有大佬知道这是怎么回事吗?

    嵌入式 MUC ST 国产芯片 单片机 技术交流

    2297浏览量 14回复量 关注量
  • STM32的DMA中传输数据宽度与实际宽度不符会怎样?

    如果uint16_t A[]={0,1,2,3},B[]={0,0,0,0};要将A数组的数据用DMA传递到B数组中,但是在设置数据宽度的时候设置的是一位DMA_Initstructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte。将结果显示在OLED屏幕上,结果只有前两个数正确的传到了B数组中,B数组在OLDE上显示的是0,1,0,0。出现这种问题的根本原因是什么。

    ST 嵌入式

    3643浏览量 21回复量 关注量