ST意法半导体
登录
直播中
南中南
9年用户
1003经验值
擅长:光电显示
私信
关注
[问答]
STM32F103C8如何使用DMA和IDLE通过USART1接收数据?
开启该帖子的消息推送
STM32F103C8
大家好,我使用
STM32
F103C8并尝试使用DMA和IDLE通过USART1接收数据。当我收到 1 个字符并发生 IDLE 时,就会生成 USART1 中断并像这样调用“USART1_IRQHandler”函数。
void USART1_IRQHandler(void)
{
count = count + 1;
}
但计数不增加 1。它的值增加很大。
主程序
int count=0;
int main()
{
system_clock_config();
uart1_rx_Init();
NVIC_EnableIRQ(USART1_IRQn);
DMA1_channel5_init((uint32_t) RES_CMD, (uint32_t) &USART1->DR, 4);
while(1)
{
}
}
uart1_rx_Init
void uart1_rx_Init(void)
{
/*Enable IO Port A*/
RCC->APB2ENR |= (1U<<2);
/*Enable UART1*/
RCC->APB2ENR |= (1U<<14);
/*Set Port A Pin10 As Input Pull-up Pull-down*/
GPIOA->CRH |= (1U<<10);
/*Set Buad Rate 9600*/
USART1->BRR |= 0x1D4C;
/*Enable IDLE Line*/
USART1->CR1 |= (1U<<4);
/*Enable Receiver*/
USART1->CR1 |= (1U<<2);
/*Enable UART*/
USART1->CR1 |= (1U<<13);
}
DMA1_channel5_init
void DMA1_channel5_init(uint32_t src, uint32_t dst, uint32_t len)
{
/*Enable Clock Access To DMA*/
RCC->AHBENR |= (1U<<0);
/*Disable DMA1 Channel5*/
DMA1_Channel5->CCR &= ~(1U<<0);
/*Wait For DMA1 Channel5 is Disable*/
while(DMA1_Channel5->CCR & (1U<<0)){}
/*Clear All Interrupt Flags of Channel5*/
DMA1->IFCR |= (1U<<16);
DMA1->IFCR |= (1U<<17);
DMA1->IFCR |= (1U<<18);
DMA1->IFCR |= (1U<<19);
/*Set the Des
ti
nation Buffer*/
DMA1_Channel5->CPAR = dst;
/*Set the Source Buffer*/
DMA1_Channel5->CMAR = src;
/*Set Length*/
DMA1_Channel5->CNDTR = len;
/*Enable Memory Increment*/
DMA1_Channel5->CCR |= (1U<<7);
/*Enable Circular Mode*/
DMA1_Channel5->CCR &= ~(1U<<5);
/*Configure Transfer Direction*/
DMA1_Channel5->CCR &= ~(1U<<4);
/*Enable DMA Transfer Complete Interrupt*/
//DMA1_Channel5->CCR |= (1U<<1);
/*Enable DMA1 Channel5*/
DMA1_Channel5->CCR |= (1U<<0);
/*Enable UART1 Transmitter DMA*/
USART1->CR3 |= (1U<<6);
}
回帖
(1)
赵羽
2022-12-9 14:34:06
外设 IRQ 处理程序通常会首先通过检查外设寄存器中的对应位来分析调用它的确切原因,最后在离开处理程序之前清除位/标志/中断条件。如果你没有清除正确的位,处理程序将被一次又一次地调用......
外设 IRQ 处理程序通常会首先通过检查外设寄存器中的对应位来分析调用它的确切原因,最后在离开处理程序之前清除位/标志/中断条件。如果你没有清除正确的位,处理程序将被一次又一次地调用......
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32F103C8
stm32f103C8
T6是如何使用
DMA
发送
数据
的
2021-12-06
3426
如何去实现基于
STM32F103C
6的串口
USART1
功能呢
2021-12-13
2074
求分享
stm32F1
的
usart1-DMA-IDLE
收发代码
2021-12-13
728
串口是如何利用
USART_IT_IDLE+DMA
接收
完整的一帧
数据
的
2021-10-27
1606
STM32F103
的
USART
3串口
DMA
接收
缓冲区发生错误的原因
2021-12-09
1792
怎样去解决
STM32F103
RC的
Usart
用
DMA
空闲中断
接收
数据
假死的问题
2021-12-14
1602
STM32F103C8
串口中断/
接收
数据
得知识点汇总,不看肯定后悔
2021-12-03
1383
STM32F103C8
单片机是怎样与串口传感器对接上的
2021-10-25
1272
STM32F103
实现
usart1
和 ADC
1
的
DMA
接收
时遇到的问题
2018-08-28
5091
stm32f103
uart使用
DMA
发送
接收
数据
该如何去实现呢
2021-12-13
1390
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分