嵌入式代码中BSP,MSP的含义

BSP:Board Support Package 针对具体电路板的板级支持包
MSP:MCU Specific Package 针对具体MCU的初始化程序代码(包)


阅读代码的过程中会看到BSP_Init(); 起初对BSP不理解,看到ST的一个文档,其中有段描述,感觉不错,贴出来分享一下。
在这里插入图片描述


MSP 比如串口的初始化
1、我们要初始化和MCU无关的东西:例如串口协议,其中包括波特率,奇偶校验,停止位等等,这些设置和使用什么样的MCU没有任何关系,可以使用F1的MCU,也可以是F2…F4,甚至是PC上的串口。所以就把串口抽像成为一个“串口”。
2、有了抽像的串口,这个“串口”就要在MCU上进行承载,用STM32进行承载,PA9做为发送,PA10做为接收.MSP就是要初始化PA9,PA10。配置这两个引解
所以HAL驱动方式的初始化流程就是:HAL_USART_Init() ------>HAL_USART_MSP_Init() 先初始化协议,再初始化MCU的引角。在STM32的HAL驱动中MSP_Init()是做为回调,包含在PPP_Init()中的。


  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的msp430f5529驱动lcd1602显示的代码示例: ```c #include <msp430.h> // 引入msp430头文件 #define RS BIT0 // P1.0为RS引脚 #define EN BIT1 // P1.1为EN引脚 #define D4 BIT2 // P1.2为D4引脚 #define D5 BIT3 // P1.3为D5引脚 #define D6 BIT4 // P1.4为D6引脚 #define D7 BIT5 // P1.5为D7引脚 void delay(unsigned int ms) { unsigned int i; for (i = 0; i < ms; i++) { __delay_cycles(1000); // 延迟1ms } } void lcd_command(unsigned char command) { // 发送命令 P1OUT &= ~(RS | EN); // RS = 0, EN = 0 P1OUT = (command & 0xF0) | RS; // 发送高4位数据 P1OUT |= EN; // EN = 1 delay(1); // 延迟1ms P1OUT &= ~EN; // EN = 0 delay(1); // 延迟1ms P1OUT &= ~RS; // RS = 0 P1OUT = ((command & 0x0F) << 4) | RS; // 发送低4位数据 P1OUT |= EN; // EN = 1 delay(1); // 延迟1ms P1OUT &= ~EN; // EN = 0 delay(1); // 延迟1ms } void lcd_init(void) { // 初始化LCD P1DIR |= RS | EN | D4 | D5 | D6 | D7; // 设置引脚为输出 P1OUT &= ~(RS | EN | D4 | D5 | D6 | D7); // 引脚输出低电平 delay(100); // 延迟100ms lcd_command(0x33); // 初始化 lcd_command(0x32); // 初始化 lcd_command(0x28); // 4位数据,2行显示,5x7点阵 lcd_command(0x0C); // 开启显示,无光标 lcd_command(0x06); // 光标右移 lcd_command(0x01); // 清屏 delay(10); // 延迟10ms } void lcd_display(unsigned char x, unsigned char y, unsigned char data) { // 在指定位置显示字符 unsigned char address; if (y == 0) { address = 0x80 + x; } else { address = 0xC0 + x; } lcd_command(address); P1OUT |= RS; P1OUT = ((data & 0xF0) | RS) | EN; delay(1); P1OUT &= ~EN; delay(1); P1OUT &= ~RS; P1OUT = ((data & 0x0F) << 4) | RS | EN; delay(1); P1OUT &= ~EN; delay(1); } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器 lcd_init(); // 初始化LCD while (1) { lcd_display(0, 0, 'H'); // 在第一行第一个位置显示'H' lcd_display(1, 0, 'e'); // 在第一行第二个位置显示'e' lcd_display(2, 0, 'l'); // 在第一行第三个位置显示'l' lcd_display(3, 0, 'l'); // 在第一行第四个位置显示'l' lcd_display(4, 0, 'o'); // 在第一行第五个位置显示'o' } } ``` 在该示例,使用P1.0-P1.5作为lcd1602的RS、EN、D4、D5、D6和D7引脚。在main函数,通过调用lcd_init()函数初始化LCD,并调用lcd_display()函数在指定位置显示字符。通过不断调用lcd_display()函数,可以在LCD上不断地显示不同的字符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值