MSP432和MSP430的各个寄存器设计得很像,是款开发利器。
芯片手册资料
Technical Reference Manual
使用CCS开发需要CCS软件+SDK
TI CCS下载点我
MSP432 SDK下载点我
不同板子的区别点我
最新版CCS只支持这个了,但是很好用,默认安装好就可以了。装好CCS后安装SDK即可。
打开CCS后,依次点击project---->new CCS project----->选择芯片为MSP432P401R---->填写工程名字----->finish
此时得到一个工程,需要为工程配置一些SDK的东西:
右按键点击工程名字---->properties---->下图添加SDK的source路径
在SDK安装路径中
D:\ti\simplelink_msp432p4_sdk_3_40_01_02\examples\nortos\MSP_EXP432P401R\driverlib
有很多参考代码,可以多试试,下面我给出一些常用的。
https://www.ti.com.cn/tool/cn/MSP-EXP432P401R
https://www.ti.com/lit/ug/slau596a/slau596a.pdf?ts=1603588046477
板子的用户手册
采样完成后进入中断---->使用MAP_ADC14_toggleConversionTrigger();激发下一次采样
/*******************************************************************************
* MSP432 ADC14 - Single Channel Sample Repeat
*
* Description: This code example will demonstrate the basic functionality of
* of the DriverLib ADC APIs with sampling a single channel repeatedly. Each
* time the ADC conversion occurs, the result is stored into a local variable.
* The sample timer is used to continuously grab a new value from the ADC
* module using a manual iteration that is performed in the ADC ISR. A
* normalized ADC value with respect to the 3.3v Avcc is also calculated using
* the FPU.
*
* MSP432P401
* ------------------
* /|\| |
* | | |
* --|RST P5.5 |<--- A0 (Analog Input)
* | |
* | |
* | |
* | |
* | |
*
******************************************************************************/
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
/* Statics */
static volatile uint16_t curADCResult;
static volatile float normalizedADCRes;
int main(void)
{
/* Halting the Watchdog */
MAP_WDT_A_holdTimer();
/* Initializing Variables */
curADCResult = 0;
/* Setting Flash wait state */
MAP_FlashCtl_setWaitState(FLASH_BANK0, 1);
MAP_FlashCtl_setWaitState(FLASH_BANK1, 1);
/* Setting DCO to 48MHz */
MAP_PCM_setPowerState(PCM_AM_LDO_VCORE1);
MAP_CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48);
/* Enabling the FPU for floating point operation */
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
//![Single Sample Mode Configure]
/* Initializing ADC (MCLK/1/4) */
MAP_ADC14_enableModule();
MAP_ADC14_initModule(ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_4,
0);
/* Configuring GPIOs (5.5 A0) */
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN5,
GPIO_TERTIARY_MODULE_FUNCTION);
/* Configuring ADC Memory */
MAP_ADC14_configureSingleSampleMode(ADC_MEM0, true);
MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_AVCC_VREFNEG_VSS,
ADC_INPUT_A0, false);
/* Configuring Sample Timer */
MAP_ADC14_enableSampleTimer(ADC_MANUAL_ITERATION);
/* Enabling/Toggling Conversion */
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger();
//![Single Sample Mode Configure]
/* Enabling interrupts */
MAP_ADC14_enableInterrupt(ADC_INT0);
MAP_Interrupt_enableInterrupt(INT_ADC14);
MAP_Interrupt_enableMaster();
MAP_PCM_gotoLPM0();
while (1)
{
}
}
//![Single Sample Result]
/* ADC Interrupt Handler. This handler is called whenever there is a conversion
* that is finished for ADC_MEM0.
*/
void ADC14_IRQHandler(void)
{
uint64_t status = MAP_ADC14_getEnabledInterruptStatus();
MAP_ADC14_clearInterruptFlag(status);
if (ADC_INT0 & status)
{
curADCResult = MAP_ADC14_getResult(ADC_MEM0);
normalizedADCRes = (curADCResult * 3.3) / 16384;
MAP_ADC14_toggleConversionTrigger();
}
}
序列通道完毕后使用MAP_ADC14_toggleConversionTrigger();//再次开始转换
TI的ADC设计与MSP430很类似。
/*******************************************************************************
* MSP432 ADC14 - Multiple Channel Sample without Repeat
*
* Description: In this code example, the feature of being able to scan multiple
* ADC channels is demonstrated by the user a the DriverLib APIs. Conversion
* memory registers ADC_MEM0 - ADC_MEM7 are configured to read conversion
* results from A0-A7 respectively. Conversion is enabled and then sampling is
* toggled using a software toggle. Repeat mode is not enabled and sampling only
* occurs once (and it is expected that the user pauses the debugger to observe
* the results). Once the final sample has been taken, the interrupt for
* ADC_MEM7 is triggered and the result is stored in the resultsBuffer buffer.
*
* MSP432P401
* ------------------
* /|\| |
* | | |
* --|RST P5.5 |<--- A0 (Analog Input)
* | P5.4 |<--- A1 (Analog Input)
* | P5.3 |<--- A2 (Analog Input)
* | P5.2 |<--- A3 (Analog Input)
* | P5.1 |<--- A4 (Analog Input)
* | P5.0 |<--- A5 (Analog Input)
* | P4.7 |<--- A6 (Analog Input)
* | P4.6 |<--- A7 (Analog Input)
* | |
* | |
*
******************************************************************************/
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <string.h>
static uint16_t resultsBuffer[8];
int main( void )
{
/* Halting WDT */
MAP_WDT_A_holdTimer();
MAP_Interrupt_enableSleepOnIsrExit();
/* Zero-filling buffer */
memset( resultsBuffer, 0x00, 8 * sizeof(uint16_t) );
/* Initializing ADC (MCLK/1/1) */
MAP_ADC14_enableModule();
MAP_ADC14_initModule( ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_1,
0 );
/* Configuring GPIOs for Analog In */
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P5,
GPIO_PIN5 | GPIO_PIN4 | GPIO_PIN3 | GPIO_PIN2 | GPIO_PIN1
| GPIO_PIN0,
GPIO_TERTIARY_MODULE_FUNCTION );
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P4, GPIO_PIN7 | GPIO_PIN6, GPIO_TERTIARY_MODULE_FUNCTION );
/* Configuring ADC Memory (ADC_MEM0 - ADC_MEM7 (A0 - A7) with no repeat) */
MAP_ADC14_configureMultiSequenceMode( ADC_MEM0, ADC_MEM7, false );
MAP_ADC14_configureConversionMemory( ADC_MEM0,ADC_VREFPOS_AVCC_VREFNEG_VSS, ADC_INPUT_A0, false );
MAP_ADC14_configureConversionMemory( ADC_MEM1,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A1, false );
MAP_ADC14_configureConversionMemory( ADC_MEM2,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A2, false );
MAP_ADC14_configureConversionMemory( ADC_MEM3,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A3, false );
MAP_ADC14_configureConversionMemory( ADC_MEM4,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A4, false );
MAP_ADC14_configureConversionMemory( ADC_MEM5,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A5, false );
MAP_ADC14_configureConversionMemory( ADC_MEM6,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A6, false );
MAP_ADC14_configureConversionMemory( ADC_MEM7,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A7, false );
/* Enabling the interrupt when a conversion on channel 7 (end of sequence)
* is complete and enabling conversions */
MAP_ADC14_enableInterrupt( ADC_INT7 );
/* Enabling Interrupts */
MAP_Interrupt_enableInterrupt( INT_ADC14 );
MAP_Interrupt_enableMaster();
/* Setting up the sample timer to automatically step through the sequence
* convert.
*/
MAP_ADC14_enableSampleTimer( ADC_AUTOMATIC_ITERATION );
/* Triggering the start of the sample */
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger();
/* Going to sleep */
MAP_PCM_gotoLPM0();
while ( 1 )
{
}
}
/* This interrupt is fired whenever a conversion is completed and placed in
* ADC_MEM7. This signals the end of conversion and the results array is
* grabbed and placed in resultsBuffer */
void ADC14_IRQHandler( void )
{
uint64_t status;
status = MAP_ADC14_getEnabledInterruptStatus();
MAP_ADC14_clearInterruptFlag( status );
if ( status & ADC_INT7 )
{
MAP_ADC14_getMultiSequenceResult( resultsBuffer );
MAP_ADC14_toggleConversionTrigger();//再次开始转换
}
}
串口有个坑,更多的时候得设置为EUSCI_A_UART_LSB_FIRST,而不是EUSCI_A_UART_MSB_FIRST。
需要一个USB转TTL串口模块才能完成这个实验。
单片机回发收到的数据实验:
/******************************************************************************
* MSP432 UART - Loopback with 24MHz DCO BRCLK
*
* Description: This demo connects TX to RX of the MSP432 UART
* The example code shows proper initialization of registers
* and interrupts to receive and transmit data. If data is incorrect P1.0 LED
* is turned ON.
*
* MCLK = HSMCLK = SMCLK = DCO of 24MHz
*
* MSP432P401
* -----------------
* | |
* RST -| P3.3/UCA0TXD|----|
* | | |
* -| | |
* | P3.2/UCA0RXD|----|
* | |
* | P1.0|---> LED
* | |
*
*******************************************************************************/
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
uint8_t TXData = 1;
uint8_t RXData = 0;
/* UART Configuration Parameter. These are the configuration parameters to
* make the eUSCI A UART module to operate with a 115200 baud rate. These
* values were calculated using the online calculator that TI provides
* at:
* http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html
*/
const eUSCI_UART_ConfigV1 uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
13, // BRDIV = 13
0, // UCxBRF = 0
37, // UCxBRS = 37
EUSCI_A_UART_NO_PARITY, // No Parity
EUSCI_A_UART_MSB_FIRST, // MSB First
EUSCI_A_UART_ONE_STOP_BIT, // One stop bit
EUSCI_A_UART_MODE, // UART mode
EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION, // Oversampling
EUSCI_A_UART_8_BIT_LEN // 8 bit data length
};
int main(void)
{
/* Halting WDT */
MAP_WDT_A_holdTimer();
/* Selecting P1.2 and P1.3 in UART mode and P1.0 as output (LED) */
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,
GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
/* Setting DCO to 24MHz (upping Vcore) */
FlashCtl_setWaitState(FLASH_BANK0, 1);
FlashCtl_setWaitState(FLASH_BANK1, 1);
MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);
CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_24);
/* Configuring UART Module */
MAP_UART_initModule(EUSCI_A2_BASE, &uartConfig);
/* Enable UART module */
MAP_UART_enableModule(EUSCI_A2_BASE);
/* Enabling interrupts */
MAP_UART_enableInterrupt(EUSCI_A2_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
MAP_Interrupt_enableInterrupt(INT_EUSCIA2);
MAP_Interrupt_enableSleepOnIsrExit();
while(1)
{
}
}
/* EUSCI A0 UART ISR - Echos data back to PC host */
void EUSCIA2_IRQHandler(void)
{
uint32_t status = MAP_UART_getEnabledInterruptStatus(EUSCI_A2_BASE);
if(status & EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG)
{
RXData = MAP_UART_receiveData(EUSCI_A2_BASE);
MAP_UART_transmitData(EUSCI_A2_BASE, RXData);
}
}
// * | P1.0|-->LED
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
/* Timer_A UpMode Configuration Parameter */
const Timer_A_UpModeConfig upConfig = {
TIMER_A_CLOCKSOURCE_ACLK, //aclk
TIMER_A_CLOCKSOURCE_DIVIDER_1, //32768hz
32768, // 1 s clock
TIMER_A_TAIE_INTERRUPT_DISABLE, // Disable Timer interrupt
TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE, // Enable CCR0 interrupt
TIMER_A_DO_CLEAR // Clear value
};
int main(void)
{
/* Halting the Watchdog */
MAP_WDT_A_holdTimer();
/* Setting Flash wait state */
MAP_FlashCtl_setWaitState(FLASH_BANK0, 1);
MAP_FlashCtl_setWaitState(FLASH_BANK1, 1);
/* Setting DCO to 48MHz */
MAP_PCM_setPowerState (PCM_AM_LDO_VCORE1);
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY_48);
/* Enabling the FPU for floating point operation */
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
//p1.0
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);
/* Configuring Timer_A1 for Up Mode */
MAP_Timer_A_configureUpMode(TIMER_A1_BASE, &upConfig);
/* Enabling interrupts and starting the timer */
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Interrupt_enableInterrupt (INT_TA1_0);
MAP_Timer_A_startCounter(TIMER_A1_BASE, TIMER_A_UP_MODE);
/* Configuring P1.0 as output */
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
/* Enabling MASTER interrupts */
MAP_Interrupt_enableMaster();
MAP_PCM_gotoLPM0();
while (1)
{
}
}
void TA1_0_IRQHandler(void)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);//取反
MAP_Timer_A_clearCaptureCompareInterrupt(TIMER_A1_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_0);
}
/*******************************************************************************
* MSP432 Timer_A - Variable PWM
*
* Description: In this example, the Timer_A module is used to create a precision
* PWM with an adjustable duty cycle. The PWM initial period is 200 ms and is
* output on P2.4. The initial duty cycle of the PWM is 10%, however when the
* button is pressed on P1.1 the duty cycle is sequentially increased by 10%.
* Once the duty cycle reaches 90%, the duty cycle is reset to 10% on the
* following button press.
*
* MSP432P401
* ------------------
* /|\| |
* | | |
* --|RST P1.1 |<--Toggle Switch
* | |
* | |
* | P2.4 |--> Output PWM TA0.1
* | P2.5 |--> Output PWM TA0.2
* | P2.6 |--> Output PWM TA0.3
* | P2.7 |--> Output PWM TA0.4
* | |
* | |
*
*******************************************************************************/
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
//![Simple Timer_A Config]
/* Timer_A PWM Configuration Parameter */
Timer_A_PWMConfig pwmConfig = {
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_8,
32000,
TIMER_A_CAPTURECOMPARE_REGISTER_1,
TIMER_A_OUTPUTMODE_RESET_SET,
3200 };
Timer_A_PWMConfig pwmConfig2 = {
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_8,
32000,
TIMER_A_CAPTURECOMPARE_REGISTER_2,
TIMER_A_OUTPUTMODE_RESET_SET,
3200 };
Timer_A_PWMConfig pwmConfig3 = {
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_8,
32000,
TIMER_A_CAPTURECOMPARE_REGISTER_3,
TIMER_A_OUTPUTMODE_RESET_SET,
3200 };
Timer_A_PWMConfig pwmConfig4 = {
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_8,
32000,
TIMER_A_CAPTURECOMPARE_REGISTER_4,
TIMER_A_OUTPUTMODE_RESET_SET,
3200 };
//![Simple Timer_A Config]
int main(void)
{
/* Halting the watchdog */
MAP_WDT_A_holdTimer();
/* Setting Flash wait state */
MAP_FlashCtl_setWaitState(FLASH_BANK0, 1);
MAP_FlashCtl_setWaitState(FLASH_BANK1, 1);
/* Setting DCO to 48MHz */
MAP_PCM_setPowerState(PCM_AM_LDO_VCORE1);
MAP_CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48);
/* Enabling the FPU for floating point operation */
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
/* Configuring GPIO2.4 as peripheral output for PWM and P1.1 for button
* interrupt */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN4,GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN5,GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN6,GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN7,GPIO_PRIMARY_MODULE_FUNCTION);
//![Simple Timer_A Example]
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig2);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig3);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig4);
//![Simple Timer_A Example]
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
/* Enabling interrupts */
MAP_Interrupt_enableInterrupt(INT_PORT1);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Interrupt_enableMaster();
/* Sleeping when not in use */
MAP_PCM_gotoLPM0();
while (1)
{
}
}
/* Port1 ISR - This ISR will progressively step up the duty cycle of the PWM
* on a button press
*/
void PORT1_IRQHandler(void)
{
uint32_t status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);
if (status & GPIO_PIN1)
{
if (pwmConfig.dutyCycle == 28800)
pwmConfig.dutyCycle = 3200;
else
pwmConfig.dutyCycle += 3200;
pwmConfig2.dutyCycle=pwmConfig.dutyCycle;
pwmConfig3.dutyCycle=pwmConfig.dutyCycle;
pwmConfig4.dutyCycle=pwmConfig.dutyCycle;
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig2);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig3);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig4);
}
}
介绍
https://bbs.elecfans.com/jishu_546635_1_1.html
delaysys.h
#ifndef delaysys
#define delaysys
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
static uint8_t fac_us=0; //us延时倍乘数
static uint16_t fac_ms=0; //ms延时倍乘数
void delay_init(uint32_t SystemCoreClock)
{
fac_us = SystemCoreClock / 1000000; //这里的us和系统频率有关
//fac_us = 48;
fac_ms = (uint16_t)fac_us*1000; //ms即为us的1000倍
}
void delay_us(uint32_t nus)
{
uint32_t temp;
SysTick->LOAD=(uint32_t)(nus*fac_us); //STRVR 重装载寄存器内容设置
SysTick->VAL=0x00; //STCVR 复位当前寄存器内容
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; //STCSR 状态寄存器配置
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
void delay_ms(uint16_t nms)
{
uint32_t temp;
SysTick->LOAD=(uint32_t)(nms*fac_ms);
SysTick->VAL =0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
#endif
main.c
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
#include "delaysys.h"
int main(void)
{
/* Halting WDT */
MAP_WDT_A_holdTimer();
/* Configuring P1.0 as output */
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
FlashCtl_setWaitState(FLASH_BANK0, 1);
FlashCtl_setWaitState(FLASH_BANK1, 1);
/* Setting DCO to 24MHz */
MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);
CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_24);
/* Enabling the FPU for floating point operation */
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
/* Enabling MASTER interrupts */
//MAP_Interrupt_enableMaster();
delay_init(24000000);
while (1)
{
delay_ms(100);
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //取反
}
}
基于第10节的滴答定时器
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
#include "delaysys.h"
int main(void)
{
/* Halting WDT */
MAP_WDT_A_holdTimer();
FlashCtl_setWaitState(FLASH_BANK0, 1);
FlashCtl_setWaitState(FLASH_BANK1, 1);
/* Setting DCO to 24MHz */
MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);
CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_24);
/* Enabling the FPU for floating point operation */
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
/* Enabling MASTER interrupts */
//MAP_Interrupt_enableMaster();
delay_init(24000000);
/* Configuring P1.0 as output */
MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN2);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
while (1)
{
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN0);
delay_ms(1000);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN1);
delay_ms(1000);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN2);
delay_ms(1000);
}
}
基于第10节的滴答定时器
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
#include "delaysys.h"
int main(void)
{
/* Halting WDT */
MAP_WDT_A_holdTimer();
FlashCtl_setWaitState(FLASH_BANK0, 1);
FlashCtl_setWaitState(FLASH_BANK1, 1);
/* Setting DCO to 24MHz */
MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);
CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_24);
/* Enabling the FPU for floating point operation */
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
/* Enabling MASTER interrupts */
//MAP_Interrupt_enableMaster();
delay_init(24000000);
/* Configuring P as output */
MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
while (1)
{
if (MAP_GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1) == 0)
{
delay_ms(5);
if (MAP_GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1) == 0)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);
while(MAP_GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1) == 0);
}
}
}
}
//使用资源SysTick延时、串口0 115200 P1.2 and P1.3 in UART mode、
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
static uint8_t fac_us = 0; //us延时倍乘数
static uint16_t fac_ms = 0; //ms延时倍乘数
void delay_init(uint32_t SystemCoreClock)
{
fac_us = SystemCoreClock / 1000000; //这里的us和系统频率有关
//fac_us = 48;
fac_ms = (uint16_t) fac_us * 1000; //ms即为us的1000倍
}
void delay_us(uint32_t nus)
{
uint32_t temp;
SysTick->LOAD = (uint32_t) (nus * fac_us); //STRVR 重装载寄存器内容设置
SysTick->VAL = 0x00; //STCVR 复位当前寄存器内容
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; //STCSR 状态寄存器配置
do
{
temp = SysTick->CTRL;
}
while (temp & 0x01 && !(temp & (1 << 16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0X00;
}
void delay_ms(uint16_t nms)
{
uint32_t temp;
SysTick->LOAD = (uint32_t) (nms * fac_ms);
SysTick->VAL = 0x00;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
do
{
temp = SysTick->CTRL;
}
while (temp & 0x01 && !(temp & (1 << 16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0X00;
}
uint8_t TXData = 1;
uint8_t RXData = 0;
const eUSCI_UART_ConfigV1 uartConfig = {
EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
13, // BRDIV = 13
0, // UCxBRF = 0
37, // UCxBRS = 37
EUSCI_A_UART_NO_PARITY, // No Parity
EUSCI_A_UART_LSB_FIRST, // LSB First
EUSCI_A_UART_ONE_STOP_BIT, // One stop bit
EUSCI_A_UART_MODE, // UART mode
EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION, // Oversampling
EUSCI_A_UART_8_BIT_LEN // 8 bit data length
};
void send_str(unsigned char *p)
{
while (*p)
{
MAP_UART_transmitData(EUSCI_A0_BASE, *p++);
}
}
unsigned char fasong[20];
int main(void)
{
/* Halting WDT */
MAP_WDT_A_holdTimer();
/* Selecting P1.2 and P1.3 in UART mode */
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P1,
GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3,
GPIO_PRIMARY_MODULE_FUNCTION);
/* Configuring P1.0 as output */
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
FlashCtl_setWaitState(FLASH_BANK0, 1);
FlashCtl_setWaitState(FLASH_BANK1, 1);
/* Setting DCO to 24MHz */
MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);
CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_24);
/* Enabling the FPU for floating point operation */
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
/* Configuring UART Module */
MAP_UART_initModule(EUSCI_A0_BASE, &uartConfig);
/* Enable UART module */
MAP_UART_enableModule(EUSCI_A0_BASE);
/* Enabling interrupts */
MAP_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
MAP_Interrupt_enableInterrupt(INT_EUSCIA0);
/* Enabling MASTER interrupts */
MAP_Interrupt_enableMaster();
delay_init(24000000);
while (1)
{
delay_ms(2000);
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); //取反
fasong[0] = 1 % 100 / 10 + '0';
fasong[1] = 2 % 10 + '0';
fasong[2] = 'C';
fasong[3] = ' ';
fasong[4] = 3 % 100 / 10 + '0';
fasong[5] = 4 % 10 + '0';
fasong[6] = '%';
fasong[7] = 'R';
fasong[8] = 'H';
fasong[9] = '\r';
fasong[10] = '\n';
fasong[11] = 0;
send_str(fasong);
}
}
/* EUSCI A0 UART ISR - Echos data back to PC host */
void EUSCIA0_IRQHandler(void)
{
uint32_t status = MAP_UART_getEnabledInterruptStatus(EUSCI_A0_BASE);
if (status & EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG)
{
RXData = MAP_UART_receiveData(EUSCI_A0_BASE);
MAP_UART_transmitData(EUSCI_A0_BASE, RXData);
}
}
//| P6.6/TA2.3|--> pwm
Timer_A_PWMConfig pwmConfig = {
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_24, 1000,
TIMER_A_CAPTURECOMPARE_REGISTER_3,
TIMER_A_OUTPUTMODE_RESET_SET, 500 };
//p6.6 pwm
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(
GPIO_PORT_P6, GPIO_PIN6, GPIO_PRIMARY_MODULE_FUNCTION);
MAP_Timer_A_generatePWM(TIMER_A2_BASE, &pwmConfig);
普通IO
API | 功能 |
---|---|
MAP_GPIO_setAsOutputPin(GPIO_PORT_P3, GPIO_PIN6) | 输出 |
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P3, GPIO_PIN6) | 设置为上拉输入 |
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN6) | 输出高电平 |
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN6) | 输出低电平 |
MAP_GPIO_getInputPinValue(GPIO_PORT_P3, GPIO_PIN6) | 读取输入值 |
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P3, GPIO_PIN6) | 翻转输出 |
MAP_GPIO_setAsInputPinWithPullDownResistor(GPIO_PORT_P3, GPIO_PIN6) | 设置为下拉输入 |
文章浏览阅读331次。第一部分:准备工作1 安装虚拟机2 安装centos73 安装JDK以上三步是准备工作,至此已经完成一台已安装JDK的主机第二部分:准备3台虚拟机以下所有工作最好都在root权限下操作1 克隆上面已经有一台虚拟机了,现在对master进行克隆,克隆出另外2台子机;1.1 进行克隆21.2 下一步1.3 下一步1.4 下一步1.5 根据子机需要,命名和安装路径1.6 ..._创建一个hadoop项目
文章浏览阅读1.7k次。心脏滴血漏洞HeartBleed CVE-2014-0160 是由heartbeat功能引入的,本文从深入码层面的分析该漏洞产生的原因_heartbleed代码分析
文章浏览阅读1.4k次。前言ofd是国家文档标准,其对标的文档格式是pdf。ofd文档是容器格式文件,ofd其实就是压缩包。将ofd文件后缀改为.zip,解压后可看到文件包含的内容。ofd文件分析工具下载:点我下载。ofd文件解压后,可以看到如下内容: 对于xml文件,可以用文本工具查看。但是对于印章文件(Seal.esl)、签名文件(SignedValue.dat)就无法查看其内容了。本人开发一款ofd内容查看器,..._signedvalue.dat
文章浏览阅读1.8w次,点赞29次,收藏313次。整体系统设计本设计主要是对ADC和DAC的使用,主要实现功能流程为:首先通过串口向FPGA发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的数据存在ROM中,转换开始时读取ROM中数据进行读取转换。其次用按键控制adc128s052进行模数转换100次,模数转换数据存储到FIFO中,再从FIFO中读取数据通过串口输出显示在pc上。其整体系统框图如下:图1:FPGA数据采集系统框图从图中可以看出,该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、D.._基于fpga的信息采集
文章浏览阅读2.5w次。1.背景错误信息:-- [http-nio-9904-exec-5] o.s.c.n.z.filters.post.SendErrorFilter : Error during filteringcom.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud..._com.netflix.zuul.exception.zuulexception
文章浏览阅读358次。1.介绍图的相关概念 图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为: G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图
文章浏览阅读321次。(十二)、WDS服务器安装通过前面的测试我们会发现,每次安装的时候需要加域光盘映像,这是一个比较麻烦的事情,试想一个上万个的公司,你天天带着一个光盘与光驱去给别人装系统,这将是一个多么痛苦的事情啊,有什么方法可以解决这个问题了?答案是肯定的,下面我们就来简单说一下。WDS服务器,它是Windows自带的一个免费的基于系统本身角色的一个功能,它主要提供一种简单、安全的通过网络快速、远程将Window..._doc server2012上通过wds+mdt无人值守部署win11系统.doc
文章浏览阅读219次。python–xlrd/xlwt/xlutilsxlrd只能读取,不能改,支持 xlsx和xls 格式xlwt只能改,不能读xlwt只能保存为.xls格式xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改xlrd打开文件import xlrdexcel=xlrd.open_workbook('E:/test.xlsx') 返回值为xlrd.book.Book对象,不能修改获取sheett_xlutils模块可以读xlsx吗
文章浏览阅读8.2w次,点赞267次,收藏656次。运行Selenium出现'WebDriver' object has no attribute 'find_element_by_id'或AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'等定位元素代码错误,是因为selenium更新到了新的版本,以前的一些语法经过改动。..............._unresolved attribute reference 'find_element_by_id' for class 'webdriver
文章浏览阅读198次。一:模态窗口//父页面JSwindow.showModalDialog(ifrmehref, window, 'dialogWidth:550px;dialogHeight:150px;help:no;resizable:no;status:no');//子页面获取父页面DOM对象//window.showModalDialog的DOM对象var v=parentWin..._jquery获取父window下的dom对象
文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法
文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范