STM32学习
学习STM321.开发环境1.1STM32CubeMX1.2DMK1.3STM32CubeIDE1.开发环境使用的软件:1.1STM32CubeMX1.2DMK1.3STM32CubeIDE1.1STM32CubeMX1.2DMK1.3STM32CubeIDE
学习STM32
1.开发环境
硬件开发板:
nucleo-G070BR
使用的软件:
1.1 STM32CubeMX
1.2 DMK
1.3 STM32CubeIDE
常用文档:
开发板原理图
HAL 函数文档
1.1 STM32CubeMX
1.2 DMK
1.3 STM32CubeIDE
2. GPIO
2.1 output
简单控制LED亮灭。用STM3232CubeMX生产项目给MDK.
问题 1.MDK软件仿真不了,出现死循环。
问题 2. 硬件仿真时间计算不了,晚上很多介绍设置TRACE但是一设置出现硬件问题提示。
1.2 Input
通过按键控制LED。不知道怎么看运行时间无法判断延时时间是否正确。
问题 1.STM32cubeMX 重新配置之后有限代码丢失:
CubeMX会删除不符合格式的代码。需要在里面注释可以写用户代码的地方插入代码。
问题 2.STM32cubeMX 运行修改变量
后面整个都要输入才可以。
1.2 GPIO 中断
中断触发条件:上升沿、下降沿和上升下降沿触发。
1.2.1 外部中断
1.触发中断进入中断服务函数有会调用清除中断标志位
__HAL_GPIO_EXTI_CLEAR_RISING_IT(GPIO_Pin);
HAL_GPIO_EXTI_CLEAR_FALLING_IT(GPIO_Pin);
2.之后调用回传函数
HAL_GPIO_EXTI_Rising_Callback(GPIO_Pin);
HAL_GPIO_EXTI_Falling_Callback(GPIO_Pin);
3.用户程序可以重写回传函数来完成或者在中断入口函数里面。
所有相同中断入口中断源,可以在回传函数里面手动判断具体那一个中断源引起的中断。在进行相应处理。
void HAL_GPIO_EXTI ***Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
case GPIO_PIN:
case GPIO_PIN:
default:break;
}
}
1.2.2 外部事件
G07中断线EXTI_LINE_11可以作为ADC触发事件。
1.2.3 内部软件中断或事件
- __HAL_GPIO_EXTI_GENERATE_SWIT(EXTI_LINE) 两个下划线开头。EXTI_LINE = GPIO_PIN_X;硬件中断如果是 PC7则GPIO_PIN_7. 不能使用EXTI_LINE_7.
- 用HAL_EXTI_GenerateSWI(&Soft_exit);
EXTI_HandleTypeDef Soft_exit;
Soft_exit.Line = EXTI_LINE_13;
HAL_EXTI_GenerateSWI(&Soft_exit);
//必须与硬件中断口对应的中断线一致。不能使用GPIO_PIN_7,或者其他中断线。
3).G07系列软件 中断只有上升沿中断。
*问题 1.不理解下面结构体里面第2和第3个具体作用
typedef struct
{
uint32_t Line; /!< Exti line number /
void ( RisingCallback)(void); /!< Exti rising callback /
void ( FallingCallback)(void); /*!< Exti falling callback */
} EXTI_HandleTypeDef;
1.2.4 唤醒功能
跟低功耗相关后面在学习。
3.高级控制定时器TIM1
3.1 基本定时
1.Cube_MX初始化TIM1
更新寄存器之后会使中断标志位置位。开允许中断使能将进入中断。
2. HAL_TIM_Base_Start_IT(&htim1);开启中断使能。
为了避免一开中断使能就进入中断。
可以用:__HAL_TIM_CLEAR_FLAG(&htim1, TIM_SR_UIF);除去中断标志位。启动计时器之后由硬件置位。
更多推荐
所有评论(0)