前言:介绍使用STM32 cubeMX软件建立工程,实现基本GPIO操作。
一:打开STM32 cube MX软件,新建工程项目,这里我们直接点击图示的按键即可。
1.2选择本款开发板的芯片类型 :STM32F103VE
选择好芯片之后,直接开启工程文件就可以了。
1.3 由于板载了DAP-link的调试器,这里我们需要把芯片的调试功能打开,将PA13,PA14设置成调试口,否则当我们下载工程之后,由于没有使能芯片的调试功能,无法进行二次工程的下载,如下所示:
1.4 查看原理图得知:开发板集成外外部8Mhz的晶振和32.767khz的RTC晶振,所以这里我们就直接使用外部晶振作为项目的时钟来源。
1.5 中断向量的配置:STM32cube MX软件默认配置的是4组向量分组,这里我修改成为了2组向量的,具有响应优先级和抢占优先级的区别,其实作为选择芯片的外设来说,这两个的区别不大。
1.6 时钟树的配置:
为了更好的体现芯片的性能,这里我是将PLL时钟配置成72Mhz,这里APB1 APB2的时钟都会是72MHZ,更好的体现芯片的性能
1.7 工程创建时,需要注意的地方:
主要是将配置的外设模块,单独配置成一个.C和.h文件,这样使工程更加的简洁。
二:定时器实现GPIO口的操作。
2.1 这里我使用定时器6,作为系统的基本时钟:
定时器是cpu的一个不可或缺的外部定时器,由于定时器的功能比较多,真正学会定时器的运用还是需要花费一定的时间、精力的。记得当初自己刚刚接触定时器的时候,学到32定时器的时候,对自己的打击非常大,当时都想要放弃了,主要是这一部分的知识复杂太多了,不过现在我们使用STM32cube来学习32架构,比之前要方便很多了,之前的基本的使用标准库学习,出现了问题也不知道该如何解决,这里和大家分享一下,定时器的学习经历。
这次先和大家分享STM32定时器的原理、寄存器介绍、定时器配置,定时器的几个常用的功能(如定时器中断、定时器输出比较PWM波形、定时器输入捕获、定时器编码器模式应用等)在以后得章节中和大家分享。
2.2 软件编写过程:
1:使能定时器时钟。
2:初始化定时器,配置ARR,PSC。
3:开启定时器中断,配置NVIC。
4:使能定时器。
5: 编写中断服务函数。
2.3 STM32cube MX软件的配置:
如上所示:在定时器6 每1ms进入中断一次。
2.4 代码如下所示:
void MX_TIM6_Init(void)
{
/* USER CODE BEGIN TIM6_Init 0 */
/* USER CODE END TIM6_Init 0 */
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM6_Init 1 */
/* USER CODE END TIM6_Init 1 */
htim6.Instance = TIM6;
htim6.Init.Prescaler = 999;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 71;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM6_Init 2 */
HAL_TIM_Base_Start_IT(&htim6);
/* USER CODE END TIM6_Init 2 */
}
添加定时器的回调函数,在内部实现对板载LED的简单操作。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
/* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */
/* USER CODE BEGIN Callback 1 */
if (htim->Instance == TIM6)
{
Time6point++ ;
if(Time6point %1000 == 0)
{
Time6point = 0 ;
// HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_6);
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_3);
//HAL_UART_Transmit(&huart1, RecBuffer1, 10, 0xffff);
}
}
}
三:下载之后,实物测试图如下所示:
全部评论