本文主要是介绍STM32C8T6实现微秒延时函数delay_us,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/* USER CODE BEGIN 0 */
void delay_us(uint32_t ii)
{uint32_t temp;SysTick->LOAD=ii*8;SysTick->VAL=0x00;SysTick->CTRL=0x01;//2号位1使用内核时钟do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16)));SysTick->CTRL=0X00;SysTick->VAL=0X00;
}
/* USER CODE END 0 *//*** @brief The application entry point.* @retval int*/
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 *///HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);delay_us(1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);delay_us(1);//}/* USER CODE END 3 */
}
说明:这里虽然是理论上延时1um,但是实际上使用keil arm模拟使用了20um那个样子(但是奇怪的是使用Proteus 8.15模式的时候模拟1s时间,Proteus很接近1s,使用了2s,而是不是20s)
在实际使用C8T6的时候1s,单片式实际花费10s,可见这个函数很不严谨。远远不如HAL_DELAY()函数来的严谨
本实验采用外部高速时钟8MHZ,systemtick时钟频率8MHZ(没有使用72MHZ)
这篇关于STM32C8T6实现微秒延时函数delay_us的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!