完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件为stm32f103rct6 使用dac1(PA4)输出正弦波,波形正常但系统调度异常,msh无法输入输出,不再执行每秒一次的rt_kprintf("flag main \n"),(此时依然在正常输出正弦波),调用main中for循环前的语句1或语句2任一语句任务调度即可恢复正常,rtt版本为3.1.5 做过如下尝试 1.降低DMA触发定时器TIM2的频率。没有效果。 2.换TIM6触发。依然不行 请教一下大家可能会是什么原因导致的? main中配置如下: int main(void) { rt_uint32_t re_mcp = 0; fal_init(); FlashPartition = fal_partition_find("app"); if (NULL == FlashPartition) { rt_kprintf("Can't find %s Fal partition!\n","app"); return RT_ERROR; } bsp_InitUart(); bsp_InitLed(); OsTaskCreate(); spi_init();//softspi初始化 / dac 相关配置和初始化 / DacGpioInit(); DacDmaInit(); MX_TIM2_Init(); DacInit(); //HAL_TIM_Base_Stop(&htim2); //语句1 //HAL_DAC_Stop_DMA(&hdac,DAC_CHANNEL_1);//语句2 for(;;) { rt_kprintf("flag main \n"); rt_thread_mdelay(1000); } return RT_EOK; } void DacGpioInit() { __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); } void DacDmaInit() { /* DMA controller clock enable */ __HAL_RCC_DMA2_CLK_ENABLE(); /* DMA interrupt init */ /* DMA2_Channel3_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA2_Channel3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA2_Channel3_IRQn); } void DacInit() { uint32_t Idx; //定义变量 dac用 DAC_ChannelConfTypeDef sConfig = {0}; hdac.Instance = DAC; if (HAL_DAC_Init(&hdac) != HAL_OK) { Error_Handler(); } /* * DAC channel OUT1 config */ sConfig.DAC_Trigger = DAC_TRIGGER_T2_TRGO;//DAC_TRIGGER_T2_TRGO; sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE; if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK) { Error_Handler(); } for (Idx = 0; Idx <100; Idx++) { DualSine12bit[Idx] = (Sine12bit[Idx] << 16)+ (Sine12bit[Idx]); } HAL_TIM_Base_Start(&htim2); HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t *)DualSine12bit,100,DAC_ALIGN_12B_R); } void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 72; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 100; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } } |
|
相关推荐
3个回答
|
|
这里加个延时试试,否则一直打印会占用较大的MCU资源
for(;;) { rt_kprintf("flag main n"); rt_thread_mdelay(1000); } |
|
|
|
嗯嗯 那里有延时的 往论坛粘贴代码的时候忘记粘贴过来了,延时么有用。。。
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
1379 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1080 浏览 0 评论
1502 浏览 0 评论
1385 浏览 0 评论
1030 浏览 0 评论
74589 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 17:21 , Processed in 0.943288 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号