目录
一.stm32中断模式控制LED灯
1.STMCubeMX配置项目
- 引脚配置:A4输出控制灯的亮灭,A1持续输出高电平,A7持续输出低电平,都设置为GPIO_Output;
B5模拟开关,设置为GPIO_EXTI5。
- 配置exit
- 配置SYS
- 配置GPIO
把A1配置为高电平
A7配置为低电平
把B5中断配置为上升沿和下降沿都触发
- 配置工程
2.Keil5完善代码
在stm32f1xx_hal_gpio.c这个文件中找到HAL_GPIO_Callback函数
改为下列代码:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == EXTI_Pin){
GPIO_PinState pinState = HAL_GPIO_ReadPin(EXTI_GPIO_Port,EXTI_Pin);
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(OUTPUT_GPIO_Port,OUTPUT_Pin,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(OUTPUT_GPIO_Port,OUTPUT_Pin,GPIO_PIN_SET);
}
}
3.编译之后烧录
二.STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据
1.Stm32CubeMX配置项目
- 选择芯片
- 配置RCC
- 设置USART1
- 添加两个通道
- 创建项目
2.Keil5完善代码
在main.c文件中修改main函数
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();
uint8_t message[] = "hello windows!\n";
/* 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();
MX_DMA_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)message, sizeof(message));
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
- 编译并烧录
3.效果
总结
了解了什么是DMA,DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
参考
https://blog.csdn.net/qq_47281915/article/details/121024427
https://blog.csdn.net/qq_47281915/article/details/121063896