STM32开发踩大坑(技术总监出马救场)
代码中线进行spi初始化,再进行st7789的初始化。在st7789的初始化中,把spi初始化的配置信息pb15和pb13覆盖了,故数据传输不过去。当时st7789是直接拿样例代码过来用的,模拟spi通讯能用,所以当时debug查代码的时候就没往这边想(可以说压根没往这边看)
spi初始化
void SPI2_Init(void){ //SPI2初始化
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能相关时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = SPI2_MOSI | SPI2_SCK; //SPI2的MOSI(PB15)和SCLK(PB13)为复用推免输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(SPI2PORT,&GPIO_InitStructure);
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;//双线输入输出全双工模式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//设置为SPI的主机模式(SCK主动产生时钟)
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//SPI数据大小:发送8位帧数据结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//空闲状态时SCK的状态,High为高电平,Low为低电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//时钟相位,1表示在SCK的奇数沿边采样,2表示偶数沿边采样
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS由软件控件片选
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//时钟的预分频值(0~256)
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //MSB高位在前
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2,&SPI_InitStructure); //初始化SPI2的配置项
SPI_Cmd(SPI2,ENABLE); //使能SPI2
}
ST7789初始化
/**
* 功能:ST7789的端口初始化
* 详细说明:初始化了ST7789的SPI和一些其他IO
* 注意:背光的IO口不知道是哪个,没有连接,故在此函数没有对该IO口使能
*/
void ST7789_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructureA;
GPIO_InitTypeDef GPIO_InitStructureB;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能B端口时钟
// 错误示例
// GPIO_InitStructureB.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
// 正确示例
GPIO_InitStructureB.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_14;
// 选择PIN引脚
GPIO_InitStructureB.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructureB.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructureB); // 初始化GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能A端口时钟
GPIO_InitStructureA.GPIO_Pin = GPIO_Pin_0; // 选择PIN引脚
GPIO_InitStructureA.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructureA.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructureA); // 初始化GPIOB // PIN脚全部置为高电平
}
错误反思
gpio的初始化放在一个文件(各个模块的初始化尽量分文件),不要太散,一个好的编程习惯能省不少事
STM32开发踩大坑(技术总监出马救场)的更多相关文章
- Atitit.cto 与技术总监的区别
Atitit.cto 与技术总监的区别 1. 核心区别1 2. Cto主要职责1 3. 如何提升到cto1 4. CTO五种基本的必备素质:2 5. 2 1. 核心区别 技术总监(Chief Tech ...
- IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈
以前写过一个文(IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章),主要介绍笔者的职业发展之路,不过该文需要后续了,因为笔者现在从事的是“产品经理”一职.从笔者的导航文([置顶]博文快 ...
- [转]CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- CTO、技术总监、首席架构师的区别
2016年11月30日13:22:26[转] CTO.技术总监.首席架构师的区别 提升自已的能力,比如专业技术,行业发展趋势,技术发展趋势,协调能力,组织能力,管理能力等[技术总监] 需要从技术总监和 ...
- 【转】】CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- 技术总监和CTO的区别 浅谈CTO的作用----软件公司如何开源节流(一)[转]
我一直在思考软件公司如何开源节流.当然,老板也在思考开源节流.当然,老板思考的开源节流在公司运营层面上,而我作为CTO,我考虑的则是在产品运营角度上来思考这个问题.否则,一个软件公司,它的生存与发展就 ...
- 如何查找STM32开发资料
Ⅰ.概述 该文写给那些处于初学ST芯片开发.英文不好而又想偷懒的人. 该文主要的目的是提醒大家:学习一门技术是需要舍得花功夫,捷径是你在起点与终点之间不断的探索,最终总结出来的一条适合自己的路. 下面 ...
- Linux下STM32开发环境的搭建
目录 一.概述 1.目的 2.开发环境描述 3.Eclipse构建的STM32集成开发环境结构 4.GDB / GDB Server 调试模型 二.搭建步骤 三.详细的搭建过程 1.安装eclipse ...
- 【腾讯Bugly干货分享】总结一个技术总监的教训和经验
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/Ry-G0Nikh6m-h3ZVC2cLyQ 导语 20 ...
- [转载]CTO和技术总监区别
原文地址:http://blog.sina.com.cn/s/blog_6024cfa90101cb0h.html 技术总监(Chief Technical Officer)与CTO(Chief Te ...
随机推荐
- 莫名其妙的bug——Segmentation fault
vscode出现Segmentation fault异常,但是没有问题报错(如上) 先说原因:cout << dp[m]; m没有输入,一个空定义(空指针) 难受啊,有一次cf因为这个bu ...
- 生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)
前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式.这里我会一一展开说具体怎么配置 一.双节点均部署Nginx: 第一步 ...
- VUE商城项目 -商品分类功能 - 手稿
- 洛谷P2864
来一发在洛谷的第一篇题解 解析 首先从原点出发回到原点会形成一个环 要计算在环上的路程,首先我们要破环 利用建墙法破环 可以选取任意一个边缘上的树,往上或者往下或者往左往右建立一堵墙'|' 这样利用b ...
- [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
日文假名和韩国谚文 回忆上次内容 上次回顾了非ascii的拉丁字符编码的进化过程 0-127 是 ascii 的领域 世界各地编码分布 拉丁字符扩展 ascii 共 16 种 由iso组织制定 从 ...
- DASCTF 2023六月挑战赛|二进制专项 PWN (下)
DASCTF 2023六月挑战赛|二进制专项 PWN (下) 1.can_you_find_me 检查保护 意料之中 64位ida逆向 只有add,和del功能不能show 先看add吧 最多申请10 ...
- .NET 控件转图片
Windows应用开发有很多场景需要动态获取控件显示的图像,即控件转图片,用于其它界面的显示.传输图片数据流.保存为本地图片等用途. 下面分别介绍下一些实现方式以及主要使用场景 RenderTarge ...
- 【DataBase】MySQL 05 基础查询
MySQL数据库 05 基础查询 视频参考自:P18 - P27 https://www.bilibili.com/video/BV1xW411u7ax 配套的SQL脚本:https://shimo. ...
- 【Mybatis-Plus】06 代码生成器 CodeGenerator
导入生成器需要的依赖坐标: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybat ...
- 【Layui】04 导航 Nav
文档地址: https://www.layui.com/doc/element/nav.html 演示案例: <ul class="layui-nav" lay-filter ...