环境:
主机:WIN7
开发环境:MDK4.23
MCU:STM32F103CBT6
源代码:
配置:
//---------------------串口功能配置---------------------
//打开串口对应的外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
//启动DMA时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//DMA发送中断设置
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//DMA1通道4配置
DMA_DeInit(DMA1_Channel4);
//外设地址
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR);
//内存地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Uart_Send_Buffer;
//dma传输方向单向
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
//设置DMA在传输时缓冲区的长度
DMA_InitStructure.DMA_BufferSize = 100;
//设置DMA的外设递增模式,一个外设
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
//设置DMA的内存递增模式
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
//外设数据字长
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
//内存数据字长
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;
//设置DMA的传输模式
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
//设置DMA的优先级别
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
//设置DMA的2个memory中的变量互相访问
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel4,&DMA_InitStructure);
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);
//使能通道4
//DMA_Cmd(DMA1_Channel4, ENABLE);
//初始化参数
//USART_InitStructure.USART_BaudRate = DEFAULT_BAUD;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_BaudRate = DEFAULT_BAUD;
//初始化串口
USART_Init(USART1,&USART_InitStructure);
//TXE发送中断,TC传输完成中断,RXNE接收中断,PE奇偶错误中断,可以是多个
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//配置UART1中断
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //通道设置为串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //中断占先等级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //中断响应优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开中断
NVIC_Init(&NVIC_InitStructure); //初始化
//采用DMA方式发送
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
//启动串口
USART_Cmd(USART1, ENABLE);
//设置IO口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
//串口1的管脚初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //管脚9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //选择GPIO响应速度
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //TX初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //管脚10
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //选择GPIO响应速度
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //RX初始化
//设置IO口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //管脚9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //选择GPIO响应速度
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
中断函数:
//串口1DMA方式发送中断
void DMA1_Channel4_IRQHandler(void)
{
//清除标志位
DMA_ClearFlag(DMA1_FLAG_TC4);
//DMA_ClearITPendingBit(DMA1_FLAG_TC4);
//DMA1->IFCR |= DMA1_FLAG_TC4;
//关闭DMA
DMA_Cmd(DMA1_Channel4,DISABLE);
//DMA1_Channel4->CCR &= ~(1<<0);
//允许再次发送
Flag_Uart_Send = 0;
}
发送测试:
//串口DMA发送测试
Uart_Send_Buffer[0] = 1;
Uart_Send_Buffer[1] = 2;
Uart_Send_Buffer[2] = 3;
Uart_Send_Buffer[3] = 4;
Uart_Send_Buffer[4] = 5;
i = 1;
while (1)
{
//检查串口是否可以发送
while (Flag_Uart_Send);
Flag_Uart_Send = 1;
//设置传输数据长度
DMA_SetCurrDataCounter(DMA1_Channel4,i);
//打开DMA
DMA_Cmd(DMA1_Channel4,ENABLE);
i++;
if (i > 5)
{
i = 1;
}
}
上一篇:STM32的串口采用DMA方式接收数据测试
下一篇:STM32通过DMA采集多通道AD
推荐阅读
史海拾趣
Amphenol Nexus Technologies深知,在电子行业中,合作与共赢是实现持续发展的重要途径。因此,公司积极与产业链上下游的合作伙伴建立紧密的合作关系,共同推动行业的发展。通过与供应商、客户以及同行业企业的合作,Amphenol Nexus Technologies不断提升自身的竞争力,实现了业务的快速增长和市场的持续扩张。
以上便是关于Amphenol Nexus公司在电子行业发展的五个故事。这些故事展示了公司在不同历史阶段的发展轨迹、领导层的智慧和决策、技术创新的努力以及合作共赢的理念。正是这些因素的共同作用,使得Amphenol Nexus Technologies能够在激烈的市场竞争中脱颖而出,成为电子连接器行业的佼佼者。
某新兴显示技术公司,专注于柔性显示技术的研发。随着市场对可折叠、可卷曲电子设备需求的增加,该公司投入巨资研发新一代柔性屏幕。经过数年的努力,他们成功开发出了具有超高柔韧性、清晰度和耐用性的显示屏。这一技术的突破,不仅为智能手机、平板电脑等移动设备带来了全新的形态设计,也为可穿戴设备、车载显示等领域提供了更多可能性。
尽管已经被收购并进行了业务整合,但Dytran并没有停止其创新的步伐。公司继续加大研发投入,推动传感器技术的不断创新和升级。同时,Dytran还积极探索新的应用领域和市场空间,以满足不断变化的客户需求。
在未来,Dytran将继续致力于为客户提供高质量、高性能的传感器产品和解决方案。同时,公司还将积极参与国际竞争和合作,推动传感器技术的国际化和标准化进程。通过不断创新和发展,Dytran有望在电子行业中继续保持其领先地位并实现更加辉煌的未来。
以上五个故事框架概述了Dytran Instruments Inc.公司在电子行业中的发展历程、技术创新、市场拓展、被收购与业务整合以及未来展望等方面的重要事件和里程碑。这些故事展示了Dytran如何凭借其技术实力和市场洞察力在竞争激烈的电子行业中脱颖而出并实现持续发展。
尽管已经被收购并进行了业务整合,但Dytran并没有停止其创新的步伐。公司继续加大研发投入,推动传感器技术的不断创新和升级。同时,Dytran还积极探索新的应用领域和市场空间,以满足不断变化的客户需求。
在未来,Dytran将继续致力于为客户提供高质量、高性能的传感器产品和解决方案。同时,公司还将积极参与国际竞争和合作,推动传感器技术的国际化和标准化进程。通过不断创新和发展,Dytran有望在电子行业中继续保持其领先地位并实现更加辉煌的未来。
以上五个故事框架概述了Dytran Instruments Inc.公司在电子行业中的发展历程、技术创新、市场拓展、被收购与业务整合以及未来展望等方面的重要事件和里程碑。这些故事展示了Dytran如何凭借其技术实力和市场洞察力在竞争激烈的电子行业中脱颖而出并实现持续发展。
作为一家技术驱动型企业,Dytran始终将技术创新作为公司的核心竞争力。公司不断投入研发资源,推动传感器技术的升级和产业升级。在单轴和三轴IEPE加速度计、超高温充电模式传感器、高冲击传感器、电容式MEMS传感器等领域,Dytran都取得了显著的技术突破。这些新技术不仅提高了传感器的性能和精度,还拓展了其应用领域和市场空间。
同时,Dytran还注重与其他行业的合作与交流。通过与航空航天、汽车等行业的合作,Dytran将传感器技术应用于更多领域,推动了相关产业的发展。此外,公司还积极参与国际标准的制定和推广工作,为传感器技术的国际化和标准化做出了贡献。
随着业务的不断扩展,Antex在1980年决定将工厂从东京都大田区羽田迁至茨城县高萩市。这一搬迁不仅为公司提供了更广阔的发展空间,也标志着Antex开始向着全球化布局迈进。此后,公司积极寻求国际合作,与全球各地的供应商和客户建立了紧密的合作关系。
与替代16C711方法、注意事项PIC16C712为Microchip公司推出的基于711芯片功能基础上的增强型产品,它与16C711是Pin对Pin兼容。其功能与价格均优于16C711… 查看全部问答∨ |
为测试电子和机电器件设计开关系统所遇到的问题和设计产品本身一样多。随着器件中高速逻辑的出现以及与更灵敏模拟电路的连接,使得降低测试开关系统中的噪声比以前任何时候更加重要。 本文所述的噪声降低技术准则是针对信号频率低于300MHz、电 ...… 查看全部问答∨ |
为何wince数据库在单个记录中无法对单个属性进行连续存储呢? 像这样先存一个数再存一个字符串,完全可以存储 //////////////////////////////////////////////////////////////////// CEPROPVAL *pRorps; pRorps = new CEPROPVAL[10000];   ...… 查看全部问答∨ |
哪为牛人知道计算机系统结构下的智能网络系统具体是研究什么的?或者要学习什么知识?网上都找不到,望高手解答. 哪为牛人知道计算机系统结构下的智能网络系统具体是研究什么的?或者要学习什么知识?网上都找不到,望高手解答.谢谢!!… 查看全部问答∨ |
关于在QT里面写一个Hello,出错,请教。。。。。。。。。高手请进 各位我使用了最原始的Hello world 开始学习,可是qmake [project] ;qmak; make; 出错,信息和代码如下: -------------------------------------- #include <qapplication.h> int main( int argc, char **argv ) { QAppl ...… 查看全部问答∨ |