|
1首先要解决在proteus仿真定时器的bug。看链接http://www.51hei.com/bbs/dpj-131825-1.html
2cube设置参数
3MDK修改代码
4proteus仿真
总结,效果正常。可以很好的学习时钟树与定时器。(主要考虑非中断模式的使用,网上cube主要介绍的是中断模式)
STM32F103单片机中非中断模式TIM3定时器的精确延时仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机程序源码:
- 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();
- __HAL_RCC_TIM1_CLK_ENABLE();//去除proteus 的bug
- MX_TIM3_Init();
- /* USER CODE BEGIN 2 */
- //__HAL_RCC_TIM1_CLK_ENABLE();
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- HAL_TIM_Base_Start(&htim3); //启动定时器
- htim3.Instance->SR &= 0xfffffffe; //清除溢出标志
- while((htim3.Instance->SR & 0x01) == 0x00);//等待溢出标志
- HAL_TIM_Base_Stop(&htim3);// 停止定时器-----此语句加不加都能正常工作
- HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);//翻转输出
-
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
复制代码 |
|