你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
STM32官方实战经验分享(2020.7.31更新)
精华
[复制链接]
沐紫
发布时间:2014-1-23 14:58
阅读主题, 点击返回1楼
赞
11
收藏
156
评论
278
分享
发布时间:2014-1-23 14:58
请先
登录
后回复
278个回答
diandian
回答时间:2017-8-1 14:48:40
a1024a.1 0b0c
签到签到
赞
评论
回复
支持
反对
diandian
回答时间:2017-8-1 14:53:42
a1024a.1 0b0c
围观围观
赞
评论
回复
支持
反对
忘不掉
回答时间:2017-9-5 19:19:50
a0a.1 0b0c
非常不错!很好的资料!
赞
评论
回复
支持
反对
epochal
回答时间:2017-9-5 21:09:57
a0a.1 0b0c
版块真好!赞赞赞!
赞
评论
回复
支持
反对
leo121_3006061
回答时间:2017-9-18 11:50:24
a0a.1 0b0c
非常好的帖子,THANKS!
赞
评论
回复
支持
反对
1401696616
回答时间:2017-9-28 15:25:21
a0a.1 0b0c
许多问题并没有碰到 只能来签个到
赞
评论
回复
支持
反对
嵌了个入式
回答时间:2017-11-21 08:54:00
a0a.1 0b0c
厉害了,这个帖子必须要顶一下
赞
评论
回复
支持
反对
带我装逼带我飞
回答时间:2017-12-22 09:14:44
a1024a.1 0b0c
好贴,MARK!
赞
评论
回复
支持
反对
5768340
回答时间:2018-1-13 14:42:54
a0a.1 0b0c
HI
有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
/*****************************************
函数名称:Cdfinger_Bspspi_init
函数作用:spi初始化函数
备注:
******************************************/
void Cdfinger_Bspspi_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
int ii =0;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/*!< Enable SPI2 clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
/*!< Enable GPIO clocks */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
/*!< Connect SPI pins to AF5 */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
Cdfinger_BspCs_HIGH();
//Cdfinger_Bspdelay_ms(1);
//Cdfinger_BspCs_LOW();
SPI_Cmd(SPI2,DISABLE);
SPI_DeInit(SPI2);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
/* DMA1 Stream0 channel4 spi tx configuration **************************************/
DMA_DeInit(DMA1_Stream4);
DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DMA1_Stream4, &DMA_InitStructure);
/* DMA1 Stream0 channel3 spi rx configuration **************************************/
DMA_DeInit(DMA1_Stream3);
DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DMA1_Stream3, &DMA_InitStructure);
//Cdfinger_BspCs_HIGH();
//发送中断
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//接收中断
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
SPI_TIModeCmd(SPI2,ENABLE);
SPI_Cmd(SPI2, ENABLE);
DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
DMA_Cmd(DMA1_Stream3, ENABLE);
DMA_Cmd(DMA1_Stream4, ENABLE);
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
for(ii=0;ii<COMMUNICATIONLEN;ii++)
{
if(ii%8==0)
{
printf("\r\n");
}
printf(" 0x%x",cdfingerimgrxbuf[ii]);
}
printf("111\r\n");
}
void DMA1_Stream4_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)
{
printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
DMA_Cmd(DMA1_Stream4, DISABLE);
DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);
}
}
void DMA1_Stream3_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
{
printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
DMA_Cmd(DMA1_Stream3, DISABLE);
DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);
}
}
复制代码
赞
评论
回复
支持
反对
feixiang20
回答时间:2018-1-15 20:53:18
a0a.1 0b0c
喜欢实战篇
赞
评论
回复
支持
反对
dapan100
回答时间:2018-2-5 17:11:58
a0a.1 0b0c
多看看别人出过的错,自己就不会犯了
赞
评论
回复
支持
反对
langtaosha
回答时间:2018-2-22 21:04:38
a0a.1 0b0c
多谢,大神中的大神
赞
评论
回复
支持
反对
天外来客-399848
回答时间:2018-3-16 14:51:55
a1024a.1 0b0c
MARK一下
赞
评论
回复
支持
反对
MouseCat
回答时间:2018-3-16 17:46:27
a1024a.1 0b0c
好资料!!!!
赞
评论
回复
支持
反对
冷眼1121
回答时间:2018-3-16 19:53:51
a0a.1 0b0c
极好的帖子
赞
评论
回复
支持
反对
1 ...
10
11
12
13
14
15
16
17
18
... 19
/ 19 页
下一页
所属标签
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。